]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Merged revisions 68143 via svnmerge from
authorAmaury Forgeot d'Arc <amauryfa@gmail.com>
Thu, 1 Jan 2009 23:07:21 +0000 (23:07 +0000)
committerAmaury Forgeot d'Arc <amauryfa@gmail.com>
Thu, 1 Jan 2009 23:07:21 +0000 (23:07 +0000)
svn+ssh://pythondev@svn.python.org/python/branches/py3k

........
  r68143 | amaury.forgeotdarc | 2009-01-02 00:05:36 +0100 (ven., 02 janv. 2009) | 7 lines

  #4747: on Windows, starting a module with a non-ascii filename would print a useless "SyntaxError: None"
  when the script contains a "# coding:" declaration.

  The Python API expects char* to be utf-8 encoded. wcstombs should be avoided here.

  Reviewed by Benjamin. Will backport to 3.0
........

Misc/NEWS
Modules/main.c

index 7c8a79377791d9f4aec6c4a1f87aceecb2640dbb..dd6c445ac61f60d1e10e77cb48105eea28a284e5 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,9 @@ What's New in Python 3.0.1?
 Core and Builtins
 -----------------
 
+- Issue #4747: When the terminal does not use utf-8, executing a script with
+  non-ascii characters in its name could fail with a "SyntaxError: None" error.
+
 - Issue #4701: PyObject_Hash now implicitly calls PyType_Ready on types
   where the tp_hash and tp_dict slots are both NULL.
 
index 78913eec00e14e76acfa5416e310088d7f5d3520..3025d096c7ed190c48d393779502becb9831ee52 100644 (file)
@@ -600,18 +600,21 @@ Py_Main(int argc, wchar_t **argv)
                }
 
                if (sts==-1) {
-                       char cfilename[PATH_MAX];
+                       PyObject *filenameObj = NULL;
                        char *p_cfilename = "<stdin>";
                        if (filename) {
-                               size_t r = wcstombs(cfilename, filename, PATH_MAX);
-                               p_cfilename = cfilename;
-                               if (r == (size_t)-1 || r >= PATH_MAX)
+                               filenameObj = PyUnicode_FromWideChar(
+                                       filename, wcslen(filename));
+                               if (filenameObj != NULL)
+                                       p_cfilename = _PyUnicode_AsString(filenameObj);
+                               else
                                        p_cfilename = "<decoding error>";
                        }
                        sts = PyRun_AnyFileExFlags(
                                fp,
                                p_cfilename,
                                filename != NULL, &cf) != 0;
+                       Py_XDECREF(filenameObj);
                }
                
        }