diff options
author | Martin Panter <vadmium+py@gmail.com> | 2016-07-23 03:39:49 (GMT) |
---|---|---|
committer | Martin Panter <vadmium+py@gmail.com> | 2016-07-23 03:39:49 (GMT) |
commit | 525a949251686a9f8c795f0166797700ac56b77b (patch) | |
tree | 5461fc3fefec32d2540d7ae2663154880865d204 /Lib/test/test_zlib.py | |
parent | 5d0c59838223ce46a6e2b90a7d3ed48ee1ac481e (diff) | |
parent | 84544c1020241afdd0422449d621ce9b762cb6d1 (diff) | |
download | cpython-525a949251686a9f8c795f0166797700ac56b77b.zip cpython-525a949251686a9f8c795f0166797700ac56b77b.tar.gz cpython-525a949251686a9f8c795f0166797700ac56b77b.tar.bz2 |
Issue #27130: Merge zlib 64-bit fixes from 3.5
Diffstat (limited to 'Lib/test/test_zlib.py')
-rw-r--r-- | Lib/test/test_zlib.py | 64 |
1 files changed, 48 insertions, 16 deletions
diff --git a/Lib/test/test_zlib.py b/Lib/test/test_zlib.py index bb9292b..f9740f1 100644 --- a/Lib/test/test_zlib.py +++ b/Lib/test/test_zlib.py @@ -122,6 +122,8 @@ class ExceptionTestCase(unittest.TestCase): with self.assertRaisesRegex(OverflowError, 'int too large'): zlib.decompress(b'', 15, sys.maxsize + 1) with self.assertRaisesRegex(OverflowError, 'int too large'): + zlib.decompressobj().decompress(b'', sys.maxsize + 1) + with self.assertRaisesRegex(OverflowError, 'int too large'): zlib.decompressobj().flush(sys.maxsize + 1) @@ -194,15 +196,6 @@ class CompressTestCase(BaseCompressTestCase, unittest.TestCase): def test_big_decompress_buffer(self, size): self.check_big_decompress_buffer(size, zlib.decompress) - @bigmemtest(size=_4G + 100, memuse=1, dry_run=False) - def test_length_overflow(self, size): - data = b'x' * size - try: - self.assertRaises(OverflowError, zlib.compress, data, 1) - self.assertRaises(OverflowError, zlib.decompress, data) - finally: - data = None - @bigmemtest(size=_4G, memuse=1) def test_large_bufsize(self, size): # Test decompress(bufsize) parameter greater than the internal limit @@ -215,6 +208,16 @@ class CompressTestCase(BaseCompressTestCase, unittest.TestCase): compressed = zlib.compress(data, 1) self.assertEqual(zlib.decompress(compressed, 15, CustomInt()), data) + @unittest.skipUnless(sys.maxsize > 2**32, 'requires 64bit platform') + @bigmemtest(size=_4G + 100, memuse=4) + def test_64bit_compress(self, size): + data = b'x' * size + try: + comp = zlib.compress(data, 0) + self.assertEqual(zlib.decompress(comp), data) + finally: + comp = data = None + class CompressObjectTestCase(BaseCompressTestCase, unittest.TestCase): # Test compression object @@ -684,16 +687,45 @@ class CompressObjectTestCase(BaseCompressTestCase, unittest.TestCase): decompress = lambda s: d.decompress(s) + d.flush() self.check_big_decompress_buffer(size, decompress) - @bigmemtest(size=_4G + 100, memuse=1, dry_run=False) - def test_length_overflow(self, size): + @unittest.skipUnless(sys.maxsize > 2**32, 'requires 64bit platform') + @bigmemtest(size=_4G + 100, memuse=4) + def test_64bit_compress(self, size): data = b'x' * size - c = zlib.compressobj(1) - d = zlib.decompressobj() + co = zlib.compressobj(0) + do = zlib.decompressobj() try: - self.assertRaises(OverflowError, c.compress, data) - self.assertRaises(OverflowError, d.decompress, data) + comp = co.compress(data) + co.flush() + uncomp = do.decompress(comp) + do.flush() + self.assertEqual(uncomp, data) finally: - data = None + comp = uncomp = data = None + + @unittest.skipUnless(sys.maxsize > 2**32, 'requires 64bit platform') + @bigmemtest(size=_4G + 100, memuse=3) + def test_large_unused_data(self, size): + data = b'abcdefghijklmnop' + unused = b'x' * size + comp = zlib.compress(data) + unused + do = zlib.decompressobj() + try: + uncomp = do.decompress(comp) + do.flush() + self.assertEqual(unused, do.unused_data) + self.assertEqual(uncomp, data) + finally: + unused = comp = do = None + + @unittest.skipUnless(sys.maxsize > 2**32, 'requires 64bit platform') + @bigmemtest(size=_4G + 100, memuse=5) + def test_large_unconsumed_tail(self, size): + data = b'x' * size + do = zlib.decompressobj() + try: + comp = zlib.compress(data, 0) + uncomp = do.decompress(comp, 1) + do.flush() + self.assertEqual(uncomp, data) + self.assertEqual(do.unconsumed_tail, b'') + finally: + comp = uncomp = data = None def test_wbits(self): # wbits=0 only supported since zlib v1.2.3.5 |