summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin v. Löwis <martin@v.loewis.de>2007-08-31 11:17:42 (GMT)
committerMartin v. Löwis <martin@v.loewis.de>2007-08-31 11:17:42 (GMT)
commit5deb2101df41dc46b8eb8b705ce4cf8454db16c7 (patch)
tree08756b8b8b615d15a584224e2ff5377faff1e3f1
parent90d1fcd1011b7b5633eaeeec9c59779bc357c5b4 (diff)
downloadcpython-5deb2101df41dc46b8eb8b705ce4cf8454db16c7.zip
cpython-5deb2101df41dc46b8eb8b705ce4cf8454db16c7.tar.gz
cpython-5deb2101df41dc46b8eb8b705ce4cf8454db16c7.tar.bz2
Explicitly convert err->text to Unicode. Fixes #1069.
-rw-r--r--Python/pythonrun.c15
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;