From 08a0bbc8461399ff7dac477c68fc6fc16156ee76 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Tue, 16 Jun 2009 00:29:31 +0000 Subject: [PATCH] don't mask encoding errors when decoding a string #6289 --- Lib/test/test_coding.py | 12 ++++++++++++ Misc/NEWS | 2 ++ 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 e83015e5431..7ac3af04d83 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, "", "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) diff --git a/Misc/NEWS b/Misc/NEWS index 686e707ffc8..44f30e0c5fe 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -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 1d0a4aa3f23..0f6705de0b5 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