mirror of
https://github.com/python/cpython.git
synced 2025-11-01 18:51:43 +00:00
Fix 64-bit safety issue in BZ2Compressor and BZ2Decompressor.
This commit is contained in:
parent
b30f1b4106
commit
ea4b46f9a9
2 changed files with 59 additions and 10 deletions
|
|
@ -1,10 +1,11 @@
|
|||
#!/usr/bin/env python3
|
||||
from test import support
|
||||
from test.support import TESTFN
|
||||
from test.support import TESTFN, precisionbigmemtest, _4G
|
||||
|
||||
import unittest
|
||||
from io import BytesIO
|
||||
import os
|
||||
import random
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
|
|
@ -415,6 +416,23 @@ class BZ2CompressorTest(BaseTest):
|
|||
data += bz2c.flush()
|
||||
self.assertEqual(self.decompress(data), self.TEXT)
|
||||
|
||||
@precisionbigmemtest(size=_4G + 100, memuse=2)
|
||||
def testCompress4G(self, size):
|
||||
# "Test BZ2Compressor.compress()/flush() with >4GiB input"
|
||||
bz2c = BZ2Compressor()
|
||||
data = b"x" * size
|
||||
try:
|
||||
compressed = bz2c.compress(data)
|
||||
compressed += bz2c.flush()
|
||||
finally:
|
||||
data = None # Release memory
|
||||
data = bz2.decompress(compressed)
|
||||
try:
|
||||
self.assertEqual(len(data), size)
|
||||
self.assertEqual(len(data.strip(b"x")), 0)
|
||||
finally:
|
||||
data = None
|
||||
|
||||
class BZ2DecompressorTest(BaseTest):
|
||||
def test_Constructor(self):
|
||||
self.assertRaises(TypeError, BZ2Decompressor, 42)
|
||||
|
|
@ -453,6 +471,22 @@ class BZ2DecompressorTest(BaseTest):
|
|||
text = bz2d.decompress(self.DATA)
|
||||
self.assertRaises(EOFError, bz2d.decompress, b"anything")
|
||||
|
||||
@precisionbigmemtest(size=_4G + 100, memuse=3)
|
||||
def testDecompress4G(self, size):
|
||||
# "Test BZ2Decompressor.decompress() with >4GiB input"
|
||||
blocksize = 10 * 1024 * 1024
|
||||
block = random.getrandbits(blocksize * 8).to_bytes(blocksize, 'little')
|
||||
try:
|
||||
data = block * (size // blocksize + 1)
|
||||
compressed = bz2.compress(data)
|
||||
bz2d = BZ2Decompressor()
|
||||
decompressed = bz2d.decompress(compressed)
|
||||
self.assertTrue(decompressed == data)
|
||||
finally:
|
||||
data = None
|
||||
compressed = None
|
||||
decompressed = None
|
||||
|
||||
|
||||
class FuncTest(BaseTest):
|
||||
"Test module functions"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue