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

Serhiy Storchaka webhook-mailer at python.org
Fri Oct 20 10:08:22 EDT 2017


https://github.com/python/cpython/commit/56cb465cc93dcb35aaf7266ca3dbe2dcff1fac5f
commit: 56cb465cc93dcb35aaf7266ca3dbe2dcff1fac5f
branch: master
author: Serhiy Storchaka <storchaka at gmail.com>
committer: GitHub <noreply at github.com>
date: 2017-10-20T17:08:15+03:00
summary:

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

and in codecs.escape_decode() when decode an escaped non-ascii byte.

files:
A Misc/NEWS.d/next/Core and Builtins/2017-10-20-14-07-46.bpo-31825.gJvmGW.rst
M Lib/test/test_codecs.py
M Objects/bytesobject.c
M Objects/unicodeobject.c
M Python/ast.c

diff --git a/Lib/test/test_codecs.py b/Lib/test/test_codecs.py
index 1e63ed8d793..de6868a46c4 100644
--- a/Lib/test/test_codecs.py
+++ b/Lib/test/test_codecs.py
@@ -1203,6 +1203,8 @@ def test_escape(self):
             check(br"\8", b"\\8")
         with self.assertWarns(DeprecationWarning):
             check(br"\9", b"\\9")
+        with self.assertWarns(DeprecationWarning):
+            check(b"\\\xfa", b"\\\xfa")
 
     def test_errors(self):
         decode = codecs.escape_decode
@@ -2474,6 +2476,8 @@ def test_escape_decode(self):
             check(br"\8", "\\8")
         with self.assertWarns(DeprecationWarning):
             check(br"\9", "\\9")
+        with self.assertWarns(DeprecationWarning):
+            check(b"\\\xfa", "\\\xfa")
 
     def test_decode_errors(self):
         decode = codecs.unicode_escape_decode
diff --git a/Misc/NEWS.d/next/Core and Builtins/2017-10-20-14-07-46.bpo-31825.gJvmGW.rst b/Misc/NEWS.d/next/Core and Builtins/2017-10-20-14-07-46.bpo-31825.gJvmGW.rst
new file mode 100644
index 00000000000..18e81afa1f8
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2017-10-20-14-07-46.bpo-31825.gJvmGW.rst	
@@ -0,0 +1,2 @@
+Fixed OverflowError in the 'unicode-escape' codec and in
+codecs.escape_decode() when decode an escaped non-ascii byte.
diff --git a/Objects/bytesobject.c b/Objects/bytesobject.c
index 6a4eb67808a..48b6501f7a5 100644
--- a/Objects/bytesobject.c
+++ b/Objects/bytesobject.c
@@ -1257,7 +1257,7 @@ PyObject *PyBytes_DecodeEscape(const char *s,
     if (first_invalid_escape != NULL) {
         if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1,
                              "invalid escape sequence '\\%c'",
-                             *first_invalid_escape) < 0) {
+                             (unsigned char)*first_invalid_escape) < 0) {
             Py_DECREF(result);
             return NULL;
         }
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index bb1c0830fc5..2f308774d71 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -6136,7 +6136,7 @@ PyUnicode_DecodeUnicodeEscape(const char *s,
     if (first_invalid_escape != NULL) {
         if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1,
                              "invalid escape sequence '\\%c'",
-                             *first_invalid_escape) < 0) {
+                             (unsigned char)*first_invalid_escape) < 0) {
             Py_DECREF(result);
             return NULL;
         }
diff --git a/Python/ast.c b/Python/ast.c
index 6989965efab..a6cc0f7e044 100644
--- a/Python/ast.c
+++ b/Python/ast.c
@@ -4147,7 +4147,7 @@ decode_utf8(struct compiling *c, const char **sPtr, const char *end)
 
 static int
 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",
                                          first_invalid_escape_char);



More information about the Python-checkins mailing list