@@ -263,6 +263,52 @@ def test_unused_data(unused_size, wbits):
263263 assert decompressor .unused_data == unused_data
264264
265265
266+ @pytest .mark .parametrize ("wbits" , [15 , 31 ])
267+ def test_decompressobj_detects_format_byte_by_byte (wbits ):
268+ data = DATA [:1000 ]
269+ compressor = zlib .compressobj (wbits = wbits )
270+ compressed = compressor .compress (data ) + compressor .flush ()
271+ decompressor = isal_zlib .decompressobj (wbits = 47 )
272+ result = b"" .join (decompressor .decompress (compressed [i :i + 1 ])
273+ for i in range (len (compressed )))
274+ assert result == data
275+ assert decompressor .eof
276+
277+
278+ @pytest .mark .parametrize ("wbits" , [15 , 31 ])
279+ def test_decompressobj_detects_format_after_empty_input (wbits ):
280+ data = DATA [:1000 ]
281+ compressor = zlib .compressobj (wbits = wbits )
282+ compressed = compressor .compress (data ) + compressor .flush ()
283+ for module in (zlib , isal_zlib ):
284+ decompressor = module .decompressobj (wbits = 47 )
285+ assert decompressor .decompress (b"" ) == b""
286+ assert decompressor .decompress (compressed [:1 ]) == b""
287+ assert decompressor .decompress (compressed [1 :] + b"unused" ) == data
288+ assert decompressor .eof
289+ assert decompressor .unused_data == b"unused"
290+
291+
292+ @pytest .mark .parametrize ("wbits" , [15 , 31 ])
293+ def test_decompressobj_detects_format_after_flush (wbits ):
294+ data = DATA [:1000 ]
295+ compressor = zlib .compressobj (wbits = wbits )
296+ compressed = compressor .compress (data ) + compressor .flush ()
297+ for module in (zlib , isal_zlib ):
298+ decompressor = module .decompressobj (wbits = 47 )
299+ assert decompressor .flush () == b""
300+ assert decompressor .decompress (compressed ) == data
301+ assert decompressor .eof
302+
303+
304+ @pytest .mark .parametrize ("data" , [b"" , b"\x1f " , b"\x78 " ])
305+ def test_decompress_detect_format_incomplete (data ):
306+ with pytest .raises (zlib .error ):
307+ zlib .decompress (data , wbits = 47 )
308+ with pytest .raises (isal_zlib .error ):
309+ isal_zlib .decompress (data , wbits = 47 )
310+
311+
266312@pytest .mark .parametrize ("wbits" , [- 15 , 15 , 31 ])
267313def test_decompressobj_unconsumed_tail_after_eof (wbits ):
268314 source = b"abcdefghijklmnopqrstuvwxyz"
0 commit comments