From: Martin v. Löwis Date: Fri, 31 Aug 2007 11:17:42 +0000 (+0000) Subject: Explicitly convert err->text to Unicode. Fixes #1069. X-Git-Tag: v3.0a1~7 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=5deb2101df41dc46b8eb8b705ce4cf8454db16c7;p=thirdparty%2FPython%2Fcpython.git Explicitly convert err->text to Unicode. Fixes #1069. --- diff --git a/Python/pythonrun.c b/Python/pythonrun.c index a0019c4c4b34..eeed820faaa0 100644 --- a/Python/pythonrun.c +++ b/Python/pythonrun.c @@ -1459,7 +1459,7 @@ PyParser_SetError(perrdetail *err) static void err_input(perrdetail *err) { - PyObject *v, *w, *errtype; + PyObject *v, *w, *errtype, *errtext; PyObject* u = NULL; char *msg = NULL; errtype = PyExc_SyntaxError; @@ -1539,8 +1539,17 @@ err_input(perrdetail *err) msg = "unknown parsing error"; break; } - v = Py_BuildValue("(ziiz)", err->filename, - err->lineno, err->offset, err->text); + /* err->text may not be UTF-8 in case of decoding errors. + Explicitly convert to an object. */ + if (!err->text) { + errtext = Py_None; + Py_INCREF(Py_None); + } else { + errtext = PyUnicode_DecodeUTF8(err->text, strlen(err->text), + "replace"); + } + v = Py_BuildValue("(ziiN)", err->filename, + err->lineno, err->offset, errtext); if (err->text != NULL) { PyObject_FREE(err->text); err->text = NULL;