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()
|
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)
|
||||||
|
|
||||||
|
|
|
@ -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.
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue