diff options
author | Amaury Forgeot d'Arc <amauryfa@gmail.com> | 2009-01-01 23:05:36 (GMT) |
---|---|---|
committer | Amaury Forgeot d'Arc <amauryfa@gmail.com> | 2009-01-01 23:05:36 (GMT) |
commit | 374e220bcb1ee71053c18c0b4e409cfa69881722 (patch) | |
tree | 309b2a2e6616578448100fc086551ce418bb4bb1 | |
parent | 8ed9a8069dbef331d6097dcd2895f7cbf012897e (diff) | |
download | cpython-374e220bcb1ee71053c18c0b4e409cfa69881722.zip cpython-374e220bcb1ee71053c18c0b4e409cfa69881722.tar.gz cpython-374e220bcb1ee71053c18c0b4e409cfa69881722.tar.bz2 |
#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
-rw-r--r-- | Misc/NEWS | 3 | ||||
-rw-r--r-- | Modules/main.c | 11 |
2 files changed, 10 insertions, 4 deletions
@@ -12,6 +12,9 @@ What's New in Python 3.1 alpha 0 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 #4797: IOError.filename was not set when _fileio.FileIO failed to open file with `bytes' filename on Windows. diff --git a/Modules/main.c b/Modules/main.c index 78913ee..3025d09 100644 --- a/Modules/main.c +++ b/Modules/main.c @@ -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); } } |