diff Python/pythonrun.c @ 61383:85ac27fa913f

err_input(): don't encode/decode the unicode message
author Victor Stinner <victor.stinner@haypocalc.com>
date Sat, 08 May 2010 00:07:07 +0000
parents 7b69e630d237
children b966d5835d3b
line wrap: on
line diff
--- a/Python/pythonrun.c	Fri May 07 23:42:40 2010 +0000
+++ b/Python/pythonrun.c	Sat May 08 00:07:07 2010 +0000
@@ -1896,7 +1896,7 @@
 err_input(perrdetail *err)
 {
 	PyObject *v, *w, *errtype, *errtext;
-	PyObject* u = NULL;
+	PyObject *msg_obj = NULL;
 	char *msg = NULL;
 	errtype = PyExc_SyntaxError;
 	switch (err->error) {
@@ -1952,14 +1952,9 @@
 	case E_DECODE: {
 		PyObject *type, *value, *tb;
 		PyErr_Fetch(&type, &value, &tb);
-		if (value != NULL) {
-			u = PyObject_Str(value);
-			if (u != NULL) {
-				msg = _PyUnicode_AsString(u);
-			}
-		}
-		if (msg == NULL)
-			msg = "unknown decode error";
+		msg = "unknown decode error";
+		if (value != NULL)
+			msg_obj = PyObject_Str(value);
 		Py_XDECREF(type);
 		Py_XDECREF(value);
 		Py_XDECREF(tb);
@@ -1988,14 +1983,18 @@
 	}
 	v = Py_BuildValue("(ziiN)", err->filename,
 			  err->lineno, err->offset, errtext);
-	w = NULL;
-	if (v != NULL)
-		w = Py_BuildValue("(sO)", msg, v);
-	Py_XDECREF(u);
+	if (v != NULL) {
+		if (msg_obj)
+			w = Py_BuildValue("(OO)", msg_obj, v);
+		else
+			w = Py_BuildValue("(sO)", msg, v);
+	} else
+		w = NULL;
 	Py_XDECREF(v);
 	PyErr_SetObject(errtype, w);
 	Py_XDECREF(w);
 cleanup:
+	Py_XDECREF(msg_obj);
 	if (err->text != NULL) {
 		PyObject_FREE(err->text);
 		err->text = NULL;