diff options
author | Benjamin Peterson <benjamin@python.org> | 2009-06-16 00:29:31 (GMT) |
---|---|---|
committer | Benjamin Peterson <benjamin@python.org> | 2009-06-16 00:29:31 (GMT) |
commit | 08a0bbc8461399ff7dac477c68fc6fc16156ee76 (patch) | |
tree | 1c0d76883b1de95822b60f91930971aba9904e51 | |
parent | a1cc040828ff2c46a0c8560bddc7d21d3b9e78ef (diff) | |
download | cpython-08a0bbc8461399ff7dac477c68fc6fc16156ee76.zip cpython-08a0bbc8461399ff7dac477c68fc6fc16156ee76.tar.gz cpython-08a0bbc8461399ff7dac477c68fc6fc16156ee76.tar.bz2 |
don't mask encoding errors when decoding a string #6289
-rw-r--r-- | Lib/test/test_coding.py | 12 | ||||
-rw-r--r-- | Misc/NEWS | 2 | ||||
-rw-r--r-- | Parser/tokenizer.c | 5 |
3 files changed, 15 insertions, 4 deletions
diff --git a/Lib/test/test_coding.py b/Lib/test/test_coding.py index e83015e..7ac3af0 100644 --- a/Lib/test/test_coding.py +++ b/Lib/test/test_coding.py @@ -21,6 +21,18 @@ class CodingTest(unittest.TestCase): fp.close() 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(): test.test_support.run_unittest(CodingTest) @@ -12,6 +12,8 @@ What's New in Python 2.7 alpha 1 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 ImportFrom AST node is now None instead of an empty string. diff --git a/Parser/tokenizer.c b/Parser/tokenizer.c index 1d0a4aa..0f6705d 100644 --- a/Parser/tokenizer.c +++ b/Parser/tokenizer.c @@ -619,11 +619,8 @@ decode_str(const char *str, struct tok_state *tok) if (tok->enc != NULL) { assert(utf8 == NULL); utf8 = translate_into_utf8(str, tok->enc); - if (utf8 == NULL) { - PyErr_Format(PyExc_SyntaxError, - "unknown encoding: %s", tok->enc); + if (utf8 == NULL) return error_ret(tok); - } str = PyString_AsString(utf8); } #endif |