From 5deb2101df41dc46b8eb8b705ce4cf8454db16c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20v=2E=20L=C3=B6wis?= Date: Fri, 31 Aug 2007 11:17:42 +0000 Subject: Explicitly convert err->text to Unicode. Fixes #1069. --- Python/pythonrun.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'Python/pythonrun.c') diff --git a/Python/pythonrun.c b/Python/pythonrun.c index a0019c4c4b..eeed820faa 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; -- cgit v1.2.1