Commits

Martin von Löwis  committed 06dc432

Explicitly convert err->text to Unicode. Fixes #1069.

  • Participants
  • Parent commits 082cef3

Comments (0)

Files changed (1)

File Python/pythonrun.c

 static void
 err_input(perrdetail *err)
 {
-	PyObject *v, *w, *errtype;
+	PyObject *v, *w, *errtype, *errtext;
 	PyObject* u = NULL;
 	char *msg = NULL;
 	errtype = PyExc_SyntaxError;
 		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;