diff options
author | Xiang Zhang <angwerzx@126.com> | 2017-03-06 09:17:05 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-03-06 09:17:05 (GMT) |
commit | b76ad5121e2cfa89d6476d700cbcb65b7ffc39ac (patch) | |
tree | fd9ddcebff7e19fd07c62675dbdd5cceccd7963f | |
parent | 86aa269646fa73bbcbc26f45ed854359d04c1fde (diff) | |
download | cpython-b76ad5121e2cfa89d6476d700cbcb65b7ffc39ac.zip cpython-b76ad5121e2cfa89d6476d700cbcb65b7ffc39ac.tar.gz cpython-b76ad5121e2cfa89d6476d700cbcb65b7ffc39ac.tar.bz2 |
bpo-29714: Fix a regression that bytes format may fail when containing zero bytes inside. (GH-499)
-rw-r--r-- | Lib/test/test_bytes.py | 10 | ||||
-rw-r--r-- | Misc/NEWS | 3 | ||||
-rw-r--r-- | Objects/bytesobject.c | 4 |
3 files changed, 15 insertions, 2 deletions
diff --git a/Lib/test/test_bytes.py b/Lib/test/test_bytes.py index 671c35e..8a3b805 100644 --- a/Lib/test/test_bytes.py +++ b/Lib/test/test_bytes.py @@ -515,6 +515,11 @@ class BaseBytesTest: a = b % (b'seventy-nine', 79) self.assertEqual(a, b'seventy-nine / 100 = 79%') self.assertIs(type(a), self.type2test) + # issue 29714 + b = self.type2test(b'hello,\x00%b!') + b = b % b'world' + self.assertEqual(b, b'hello,\x00world!') + self.assertIs(type(b), self.type2test) def test_imod(self): b = self.type2test(b'hello, %b!') @@ -527,6 +532,11 @@ class BaseBytesTest: b %= (b'seventy-nine', 79) self.assertEqual(b, b'seventy-nine / 100 = 79%') self.assertIs(type(b), self.type2test) + # issue 29714 + b = self.type2test(b'hello,\x00%b!') + b %= b'world' + self.assertEqual(b, b'hello,\x00world!') + self.assertIs(type(b), self.type2test) def test_rmod(self): with self.assertRaises(TypeError): @@ -10,6 +10,9 @@ What's New in Python 3.7.0 alpha 1? Core and Builtins ----------------- +- bpo-29714: Fix a regression that bytes format may fail when containing zero + bytes inside. + - bpo-29695: Using "x" as a keyword argument in int(), bool() and float() and using "sequence" as a keyword argument in list() and tuple() are deprecated. Specify the value as a positional argument instead. diff --git a/Objects/bytesobject.c b/Objects/bytesobject.c index a30ac0c..f0ddb95 100644 --- a/Objects/bytesobject.c +++ b/Objects/bytesobject.c @@ -619,11 +619,11 @@ _PyBytes_FormatEx(const char *format, Py_ssize_t format_len, Py_ssize_t len; char *pos; - pos = strchr(fmt + 1, '%'); + pos = (char *)memchr(fmt + 1, '%', fmtcnt); if (pos != NULL) len = pos - fmt; else - len = format_len - (fmt - format); + len = fmtcnt + 1; assert(len != 0); memcpy(res, fmt, len); |