@@ -121,6 +121,8 @@ def test_decompressobj_badflush(self):
121121 def test_overflow (self ):
122122 with self .assertRaisesRegex (OverflowError , 'int too large' ):
123123 zlib .decompress (b'' , 15 , sys .maxsize + 1 )
124+ with self .assertRaisesRegex (OverflowError , 'int too large' ):
125+ zlib .decompressobj ().decompress (b'' , sys .maxsize + 1 )
124126 with self .assertRaisesRegex (OverflowError , 'int too large' ):
125127 zlib .decompressobj ().flush (sys .maxsize + 1 )
126128
@@ -194,15 +196,6 @@ def test_big_compress_buffer(self, size):
194196 def test_big_decompress_buffer (self , size ):
195197 self .check_big_decompress_buffer (size , zlib .decompress )
196198
197- @bigmemtest (size = _4G + 100 , memuse = 1 , dry_run = False )
198- def test_length_overflow (self , size ):
199- data = b'x' * size
200- try :
201- self .assertRaises (OverflowError , zlib .compress , data , 1 )
202- self .assertRaises (OverflowError , zlib .decompress , data )
203- finally :
204- data = None
205-
206199 @bigmemtest (size = _4G , memuse = 1 )
207200 def test_large_bufsize (self , size ):
208201 # Test decompress(bufsize) parameter greater than the internal limit
@@ -215,6 +208,16 @@ def test_custom_bufsize(self):
215208 compressed = zlib .compress (data , 1 )
216209 self .assertEqual (zlib .decompress (compressed , 15 , CustomInt ()), data )
217210
211+ @unittest .skipUnless (sys .maxsize > 2 ** 32 , 'requires 64bit platform' )
212+ @bigmemtest (size = _4G + 100 , memuse = 4 )
213+ def test_64bit_compress (self , size ):
214+ data = b'x' * size
215+ try :
216+ comp = zlib .compress (data , 0 )
217+ self .assertEqual (zlib .decompress (comp ), data )
218+ finally :
219+ comp = data = None
220+
218221
219222class CompressObjectTestCase (BaseCompressTestCase , unittest .TestCase ):
220223 # Test compression object
@@ -684,16 +687,45 @@ def test_big_decompress_buffer(self, size):
684687 decompress = lambda s : d .decompress (s ) + d .flush ()
685688 self .check_big_decompress_buffer (size , decompress )
686689
687- @bigmemtest (size = _4G + 100 , memuse = 1 , dry_run = False )
688- def test_length_overflow (self , size ):
690+ @unittest .skipUnless (sys .maxsize > 2 ** 32 , 'requires 64bit platform' )
691+ @bigmemtest (size = _4G + 100 , memuse = 4 )
692+ def test_64bit_compress (self , size ):
689693 data = b'x' * size
690- c = zlib .compressobj (1 )
691- d = zlib .decompressobj ()
694+ co = zlib .compressobj (0 )
695+ do = zlib .decompressobj ()
692696 try :
693- self .assertRaises (OverflowError , c .compress , data )
694- self .assertRaises (OverflowError , d .decompress , data )
697+ comp = co .compress (data ) + co .flush ()
698+ uncomp = do .decompress (comp ) + do .flush ()
699+ self .assertEqual (uncomp , data )
695700 finally :
696- data = None
701+ comp = uncomp = data = None
702+
703+ @unittest .skipUnless (sys .maxsize > 2 ** 32 , 'requires 64bit platform' )
704+ @bigmemtest (size = _4G + 100 , memuse = 3 )
705+ def test_large_unused_data (self , size ):
706+ data = b'abcdefghijklmnop'
707+ unused = b'x' * size
708+ comp = zlib .compress (data ) + unused
709+ do = zlib .decompressobj ()
710+ try :
711+ uncomp = do .decompress (comp ) + do .flush ()
712+ self .assertEqual (unused , do .unused_data )
713+ self .assertEqual (uncomp , data )
714+ finally :
715+ unused = comp = do = None
716+
717+ @unittest .skipUnless (sys .maxsize > 2 ** 32 , 'requires 64bit platform' )
718+ @bigmemtest (size = _4G + 100 , memuse = 5 )
719+ def test_large_unconsumed_tail (self , size ):
720+ data = b'x' * size
721+ do = zlib .decompressobj ()
722+ try :
723+ comp = zlib .compress (data , 0 )
724+ uncomp = do .decompress (comp , 1 ) + do .flush ()
725+ self .assertEqual (uncomp , data )
726+ self .assertEqual (do .unconsumed_tail , b'' )
727+ finally :
728+ comp = uncomp = data = None
697729
698730 def test_wbits (self ):
699731 # wbits=0 only supported since zlib v1.2.3.5
0 commit comments