diff Python/pythonrun.c @ 65536:42b84d3188d1 3.1

Recorded merge of revisions 85569-85570 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r85569 | victor.stinner | 2010-10-16 15:14:10 +0200 (sam., 16 oct. 2010) | 4 lines Issue #9713, #10114: Parser functions (eg. PyParser_ASTFromFile) expects filenames encoded to the filesystem encoding with surrogateescape error handler (to support undecodable bytes), instead of UTF-8 in strict mode. ........ r85570 | victor.stinner | 2010-10-16 15:42:53 +0200 (sam., 16 oct. 2010) | 4 lines Fix ast_error_finish() and err_input(): filename can be NULL Fix my previous commit (r85569). ........
author Victor Stinner <victor.stinner@haypocalc.com>
date Tue, 19 Oct 2010 01:22:07 +0000
parents 77c6f60a1b24
children 902f577e7f94
line wrap: on
line diff
--- a/Python/pythonrun.c	Mon Oct 18 13:49:09 2010 +0000
+++ b/Python/pythonrun.c	Tue Oct 19 01:22:07 2010 +0000
@@ -1160,7 +1160,7 @@
     d = PyModule_GetDict(m);
     if (PyDict_GetItemString(d, "__file__") == NULL) {
         PyObject *f;
-        f = PyUnicode_FromString(filename);
+        f = PyUnicode_DecodeFSDefault(filename);
         if (f == NULL)
             return -1;
         if (PyDict_SetItemString(d, "__file__", f) < 0) {
@@ -1911,7 +1911,9 @@
 {
     PyObject *v, *w, *errtype, *errtext;
     PyObject* u = NULL;
+    PyObject *filename;
     char *msg = NULL;
+
     errtype = PyExc_SyntaxError;
     switch (err->error) {
     case E_ERROR:
@@ -2000,8 +2002,17 @@
         errtext = PyUnicode_DecodeUTF8(err->text, strlen(err->text),
                                        "replace");
     }
-    v = Py_BuildValue("(ziiN)", err->filename,
-                      err->lineno, err->offset, errtext);
+    if (err->filename != NULL)
+        filename = PyUnicode_DecodeFSDefault(err->filename);
+    else {
+        Py_INCREF(Py_None);
+        filename = Py_None;
+    }
+    if (filename != NULL)
+        v = Py_BuildValue("(NiiN)", filename,
+                          err->lineno, err->offset, errtext);
+    else
+        v = NULL;
     w = NULL;
     if (v != NULL)
         w = Py_BuildValue("(sO)", msg, v);