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):
with self.assertRaisesRegexp(SyntaxError, 'BOM'):
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():
test_support.run_unittest(PEP263Test)
......
......@@ -9,6 +9,9 @@ What's New in Python 2.7.7?
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
by inspecting the return value of fwrite(). Based on patches by Jaakko Moisio
and Victor Stinner.
......
......@@ -400,6 +400,12 @@ fp_readl(char *s, int size, struct tok_state *tok)
buf = PyObject_CallObject(tok->decoding_readline, NULL);
if (buf == NULL)
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 {
tok->decoding_buffer = NULL;
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