Commit 56cb465c authored by Serhiy Storchaka's avatar Serhiy Storchaka Committed by GitHub

bpo-31825: Fixed OverflowError in the 'unicode-escape' codec (#4058)

and in codecs.escape_decode() when decode an escaped non-ascii byte.
parent 525f40d2
...@@ -1203,6 +1203,8 @@ class EscapeDecodeTest(unittest.TestCase): ...@@ -1203,6 +1203,8 @@ class EscapeDecodeTest(unittest.TestCase):
check(br"\8", b"\\8") check(br"\8", b"\\8")
with self.assertWarns(DeprecationWarning): with self.assertWarns(DeprecationWarning):
check(br"\9", b"\\9") check(br"\9", b"\\9")
with self.assertWarns(DeprecationWarning):
check(b"\\\xfa", b"\\\xfa")
def test_errors(self): def test_errors(self):
decode = codecs.escape_decode decode = codecs.escape_decode
...@@ -2474,6 +2476,8 @@ class UnicodeEscapeTest(unittest.TestCase): ...@@ -2474,6 +2476,8 @@ class UnicodeEscapeTest(unittest.TestCase):
check(br"\8", "\\8") check(br"\8", "\\8")
with self.assertWarns(DeprecationWarning): with self.assertWarns(DeprecationWarning):
check(br"\9", "\\9") check(br"\9", "\\9")
with self.assertWarns(DeprecationWarning):
check(b"\\\xfa", "\\\xfa")
def test_decode_errors(self): def test_decode_errors(self):
decode = codecs.unicode_escape_decode decode = codecs.unicode_escape_decode
......
Fixed OverflowError in the 'unicode-escape' codec and in
codecs.escape_decode() when decode an escaped non-ascii byte.
...@@ -1257,7 +1257,7 @@ PyObject *PyBytes_DecodeEscape(const char *s, ...@@ -1257,7 +1257,7 @@ PyObject *PyBytes_DecodeEscape(const char *s,
if (first_invalid_escape != NULL) { if (first_invalid_escape != NULL) {
if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1, if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1,
"invalid escape sequence '\\%c'", "invalid escape sequence '\\%c'",
*first_invalid_escape) < 0) { (unsigned char)*first_invalid_escape) < 0) {
Py_DECREF(result); Py_DECREF(result);
return NULL; return NULL;
} }
......
...@@ -6136,7 +6136,7 @@ PyUnicode_DecodeUnicodeEscape(const char *s, ...@@ -6136,7 +6136,7 @@ PyUnicode_DecodeUnicodeEscape(const char *s,
if (first_invalid_escape != NULL) { if (first_invalid_escape != NULL) {
if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1, if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1,
"invalid escape sequence '\\%c'", "invalid escape sequence '\\%c'",
*first_invalid_escape) < 0) { (unsigned char)*first_invalid_escape) < 0) {
Py_DECREF(result); Py_DECREF(result);
return NULL; return NULL;
} }
......
...@@ -4147,7 +4147,7 @@ decode_utf8(struct compiling *c, const char **sPtr, const char *end) ...@@ -4147,7 +4147,7 @@ decode_utf8(struct compiling *c, const char **sPtr, const char *end)
static int static int
warn_invalid_escape_sequence(struct compiling *c, const node *n, warn_invalid_escape_sequence(struct compiling *c, const node *n,
char first_invalid_escape_char) unsigned char first_invalid_escape_char)
{ {
PyObject *msg = PyUnicode_FromFormat("invalid escape sequence \\%c", PyObject *msg = PyUnicode_FromFormat("invalid escape sequence \\%c",
first_invalid_escape_char); first_invalid_escape_char);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment