[Python-Dev] r87518 - python/branches/py3k/Parser/tokenizer.c
Georg Brandl
g.brandl at gmx.net
Mon Dec 27 22:22:05 CET 2010
Am 27.12.2010 21:12, schrieb victor.stinner:
> Author: victor.stinner
> Date: Mon Dec 27 21:12:13 2010
> New Revision: 87518
>
> Log:
> Issue #10778: decoding_fgets() decodes the filename from the filesystem
> encoding instead of UTF-8.
>
>
> Modified:
> python/branches/py3k/Parser/tokenizer.c
>
> Modified: python/branches/py3k/Parser/tokenizer.c
> ==============================================================================
> --- python/branches/py3k/Parser/tokenizer.c (original)
> +++ python/branches/py3k/Parser/tokenizer.c Mon Dec 27 21:12:13 2010
> @@ -545,6 +545,7 @@
> {
> char *line = NULL;
> int badchar = 0;
> + PyObject *filename;
> for (;;) {
> if (tok->decoding_state == STATE_NORMAL) {
> /* We already have a codec associated with
> @@ -585,12 +586,16 @@
> if (badchar) {
> /* Need to add 1 to the line number, since this line
> has not been counted, yet. */
> - PyErr_Format(PyExc_SyntaxError,
> - "Non-UTF-8 code starting with '\\x%.2x' "
> - "in file %.200s on line %i, "
> - "but no encoding declared; "
> - "see http://python.org/dev/peps/pep-0263/ for details",
> - badchar, tok->filename, tok->lineno + 1);
> + filename = PyUnicode_DecodeFSDefault(tok->filename);
> + if (filename != NULL) {
> + PyErr_Format(PyExc_SyntaxError,
> + "Non-UTF-8 code starting with '\\x%.2x' "
> + "in file %.200U on line %i, "
> + "but no encoding declared; "
> + "see http://python.org/dev/peps/pep-0263/ for details",
> + badchar, filename, tok->lineno + 1);
> + Py_DECREF(filename);
> + }
Hmm, and in case decoding fails, we return a Unicode error (without context)
instead of a syntax error? Doesn't seem like a good trade-off when the file
name is just displayed in a message.
Georg
More information about the Python-Dev
mailing list