mirror of https://github.com/python/cpython
don't mask encoding errors when decoding a string #6289
This commit is contained in:
parent
a1cc040828
commit
08a0bbc846
|
@ -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.
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue