#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
This commit is contained in:
parent
8ed9a8069d
commit
374e220bcb
|
@ -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.
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue