don't mask encoding errors when decoding a string #6289

This commit is contained in:
Benjamin Peterson 2009-06-16 00:29:31 +00:00
parent a1cc040828
commit 08a0bbc846
3 changed files with 15 additions and 4 deletions

View File

@ -21,6 +21,18 @@ class CodingTest(unittest.TestCase):
fp.close() fp.close()
self.assertRaises(SyntaxError, compile, text, filename, 'exec') self.assertRaises(SyntaxError, compile, text, filename, 'exec')
def test_error_from_string(self):
# See http://bugs.python.org/issue6289
input = u"# coding: ascii\n\N{SNOWMAN}".encode('utf-8')
try:
compile(input, "<string>", "exec")
except SyntaxError as e:
expected = "'ascii' codec can't decode byte 0xe2 in position 16: " \
"ordinal not in range(128)"
self.assertTrue(str(e).startswith(expected))
else:
self.fail("didn't raise")
def test_main(): def test_main():
test.test_support.run_unittest(CodingTest) test.test_support.run_unittest(CodingTest)

View File

@ -12,6 +12,8 @@ What's New in Python 2.7 alpha 1
Core and Builtins Core and Builtins
----------------- -----------------
- Issue #6289: Encoding errors from compile() were being masked.
- When no module is given in a relative import, the module field of the - When no module is given in a relative import, the module field of the
ImportFrom AST node is now None instead of an empty string. ImportFrom AST node is now None instead of an empty string.

View File

@ -619,11 +619,8 @@ decode_str(const char *str, struct tok_state *tok)
if (tok->enc != NULL) { if (tok->enc != NULL) {
assert(utf8 == NULL); assert(utf8 == NULL);
utf8 = translate_into_utf8(str, tok->enc); utf8 = translate_into_utf8(str, tok->enc);
if (utf8 == NULL) { if (utf8 == NULL)
PyErr_Format(PyExc_SyntaxError,
"unknown encoding: %s", tok->enc);
return error_ret(tok); return error_ret(tok);
}
str = PyString_AsString(utf8); str = PyString_AsString(utf8);
} }
#endif #endif