summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2015-06-29 18:14:06 (GMT)
committerSerhiy Storchaka <storchaka@gmail.com>2015-06-29 18:14:06 (GMT)
commit7b6e3b91f54e8fafbb1565a7d0999dec4fca783f (patch)
treef77b8bcb146db9321bad69f307df5c5c642d9cad /Lib
parent50373e6c21e933d2fee7039204bdc51c4475d634 (diff)
downloadcpython-7b6e3b91f54e8fafbb1565a7d0999dec4fca783f.zip
cpython-7b6e3b91f54e8fafbb1565a7d0999dec4fca783f.tar.gz
cpython-7b6e3b91f54e8fafbb1565a7d0999dec4fca783f.tar.bz2
Issue #24467: Fixed possible buffer over-read in bytearray. The bytearray
object now always allocates place for trailing null byte and it's buffer now is always null-terminated.
Diffstat (limited to 'Lib')
-rw-r--r--Lib/test/test_bytes.py19
1 files changed, 18 insertions, 1 deletions
diff --git a/Lib/test/test_bytes.py b/Lib/test/test_bytes.py
index 6b58e74..b00573f 100644
--- a/Lib/test/test_bytes.py
+++ b/Lib/test/test_bytes.py
@@ -1030,10 +1030,27 @@ class ByteArrayTest(BaseBytesTest, unittest.TestCase):
for i in range(100):
b += b"x"
alloc = b.__alloc__()
- self.assertTrue(alloc >= len(b))
+ self.assertGreater(alloc, len(b)) # including trailing null byte
if alloc not in seq:
seq.append(alloc)
+ def test_init_alloc(self):
+ b = bytearray()
+ def g():
+ for i in range(1, 100):
+ yield i
+ a = list(b)
+ self.assertEqual(a, list(range(1, len(a)+1)))
+ self.assertEqual(len(b), len(a))
+ self.assertLessEqual(len(b), i)
+ alloc = b.__alloc__()
+ self.assertGreater(alloc, len(b)) # including trailing null byte
+ b.__init__(g())
+ self.assertEqual(list(b), list(range(1, 100)))
+ self.assertEqual(len(b), 99)
+ alloc = b.__alloc__()
+ self.assertGreater(alloc, len(b))
+
def test_extend(self):
orig = b'hello'
a = bytearray(orig)