Commit 22d9ee7e authored by Benjamin Peterson's avatar Benjamin Peterson

complain if the codec doesn't return unicode

parent 63cc99d9
# coding: string-escape
\x70\x72\x69\x6e\x74\x20\x32\x2b\x32\x0a
...@@ -58,6 +58,11 @@ class PEP263Test(unittest.TestCase): ...@@ -58,6 +58,11 @@ class PEP263Test(unittest.TestCase):
with self.assertRaisesRegexp(SyntaxError, 'BOM'): with self.assertRaisesRegexp(SyntaxError, 'BOM'):
compile('\xef\xbb\xbf# -*- coding: fake -*-\n', 'dummy', 'exec') compile('\xef\xbb\xbf# -*- coding: fake -*-\n', 'dummy', 'exec')
def test_non_unicode_codec(self):
with self.assertRaisesRegexp(SyntaxError,
'codec did not return a unicode'):
from test import bad_coding3
def test_main(): def test_main():
test_support.run_unittest(PEP263Test) test_support.run_unittest(PEP263Test)
......
...@@ -9,6 +9,9 @@ What's New in Python 2.7.7? ...@@ -9,6 +9,9 @@ What's New in Python 2.7.7?
Core and Builtins Core and Builtins
----------------- -----------------
- Raise a better error when non-unicode codecs are used for a file's coding
cookie.
- Issue #17976: Fixed potential problem with file.write() not detecting IO error - Issue #17976: Fixed potential problem with file.write() not detecting IO error
by inspecting the return value of fwrite(). Based on patches by Jaakko Moisio by inspecting the return value of fwrite(). Based on patches by Jaakko Moisio
and Victor Stinner. and Victor Stinner.
......
...@@ -400,6 +400,12 @@ fp_readl(char *s, int size, struct tok_state *tok) ...@@ -400,6 +400,12 @@ fp_readl(char *s, int size, struct tok_state *tok)
buf = PyObject_CallObject(tok->decoding_readline, NULL); buf = PyObject_CallObject(tok->decoding_readline, NULL);
if (buf == NULL) if (buf == NULL)
return error_ret(tok); return error_ret(tok);
if (!PyUnicode_Check(buf)) {
Py_DECREF(buf);
PyErr_SetString(PyExc_SyntaxError,
"codec did not return a unicode object");
return error_ret(tok);
}
} else { } else {
tok->decoding_buffer = NULL; tok->decoding_buffer = NULL;
if (PyString_CheckExact(buf)) if (PyString_CheckExact(buf))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment