Mercurial > cpython-lru_cache-weakref
diff Python/pythonrun.c @ 43147:06dc4321a56a
Explicitly convert err->text to Unicode. Fixes #1069.
| author | Martin v. Löwis <martin@v.loewis.de> |
|---|---|
| date | Fri, 31 Aug 2007 11:17:42 +0000 |
| parents | 2c02ba72714b |
| children | 38f3f9ef193d |
line wrap: on
line diff
--- a/Python/pythonrun.c Fri Aug 31 11:01:23 2007 +0000 +++ b/Python/pythonrun.c Fri Aug 31 11:17:42 2007 +0000 @@ -1459,7 +1459,7 @@ 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 @@ 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;
