@@ -853,6 +853,29 @@ def test_decompress_empty_content_frame(self):
853853 self .assertEqual (d .unused_data , b'' )
854854 self .assertEqual (d .unused_data , b'' ) # twice
855855
856+ def test_decompressor_max_length_zero (self ):
857+ # max_length=0 buffers the input and never produces output,
858+ # however many times it is repeated.
859+ d = ZstdDecompressor ()
860+ for _ in range (20 ):
861+ self .assertEqual (d .decompress (b'' , max_length = 0 ), b'' )
862+ self .assertEqual (d .decompress (COMPRESSED_100_PLUS_32KB , max_length = 0 ), b'' )
863+ for _ in range (20 ):
864+ self .assertEqual (d .decompress (b'' , max_length = 0 ), b'' )
865+ self .assertFalse (d .needs_input )
866+ self .assertFalse (d .eof )
867+ self .assertEqual (d .decompress (b'' ), DECOMPRESSED_100_PLUS_32KB )
868+ self .assertTrue (d .eof )
869+
870+ # Output pending from an earlier call is kept for later.
871+ d = ZstdDecompressor ()
872+ out = d .decompress (COMPRESSED_100_PLUS_32KB , max_length = 1 )
873+ for _ in range (20 ):
874+ self .assertEqual (d .decompress (b'' , max_length = 0 ), b'' )
875+ self .assertFalse (d .needs_input )
876+ self .assertEqual (out + d .decompress (b'' ), DECOMPRESSED_100_PLUS_32KB )
877+ self .assertTrue (d .eof )
878+
856879class DecompressorFlagsTestCase (unittest .TestCase ):
857880
858881 @classmethod
@@ -1167,6 +1190,18 @@ def test_decompressor_skippable(self):
11671190 d = ZstdDecompressor ()
11681191 dat = d .decompress (SKIPPABLE_FRAME , 0 )
11691192
1193+ self .assertEqual (dat , b'' )
1194+ self .assertFalse (d .eof )
1195+ self .assertFalse (d .needs_input )
1196+
1197+ dat = d .decompress (b'' , 0 )
1198+
1199+ self .assertEqual (dat , b'' )
1200+ self .assertFalse (d .eof )
1201+ self .assertFalse (d .needs_input )
1202+
1203+ dat = d .decompress (b'' )
1204+
11701205 self .assertEqual (dat , b'' )
11711206 self .assertTrue (d .eof )
11721207 self .assertFalse (d .needs_input )
0 commit comments