diff options
author | Martin v. Löwis <martin@v.loewis.de> | 2007-08-31 11:17:42 (GMT) |
---|---|---|
committer | Martin v. Löwis <martin@v.loewis.de> | 2007-08-31 11:17:42 (GMT) |
commit | 5deb2101df41dc46b8eb8b705ce4cf8454db16c7 (patch) | |
tree | 08756b8b8b615d15a584224e2ff5377faff1e3f1 | |
parent | 90d1fcd1011b7b5633eaeeec9c59779bc357c5b4 (diff) | |
download | cpython-5deb2101df41dc46b8eb8b705ce4cf8454db16c7.zip cpython-5deb2101df41dc46b8eb8b705ce4cf8454db16c7.tar.gz cpython-5deb2101df41dc46b8eb8b705ce4cf8454db16c7.tar.bz2 |
Explicitly convert err->text to Unicode. Fixes #1069.
-rw-r--r-- | Python/pythonrun.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/Python/pythonrun.c b/Python/pythonrun.c index a0019c4..eeed820 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; |