err_input(): don't encode/decode the unicode message
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index cc617be..225d178 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -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;