Forward UnicodeDecodeError into SyntaxError for source encoding errors.
Will backport to 2.4.
diff --git a/Misc/NEWS b/Misc/NEWS
index a65db9d..f5a2526 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,8 @@
 Core and builtins
 -----------------
 
+- Forward UnicodeDecodeError into SyntaxError for source encoding errors.
+
 - SF bug #900092: When tracing (e.g. for hotshot), restore 'return' events for
   exceptions that cause a function to exit.
 
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index 9e53564..68948fc 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -1474,18 +1474,20 @@
 		errtype = PyExc_IndentationError;
 		msg = "too many levels of indentation";
 		break;
-	case E_DECODE: {	/* XXX */
-		PyThreadState* tstate = PyThreadState_GET();
-		PyObject* value = tstate->curexc_value;
+	case E_DECODE: {
+		PyObject *type, *value, *tb;
+		PyErr_Fetch(&type, &value, &tb);
 		if (value != NULL) {
-			u = PyObject_Repr(value);
+			u = PyObject_Str(value);
 			if (u != NULL) {
 				msg = PyString_AsString(u);
-				break;
 			}
 		}
 		if (msg == NULL)
 			msg = "unknown decode error";
+		Py_DECREF(type);
+		Py_DECREF(value);
+		Py_DECREF(tb);
 		break;
 	}
 	case E_LINECONT: