@@ -136,6 +136,21 @@ def test_decompressor_chunks(self):
136136 self .assertTrue (lzd .eof )
137137 self .assertEqual (lzd .unused_data , b"" )
138138
139+ def test_decompressor_chunks_empty (self ):
140+ lzd = LZMADecompressor ()
141+ out = []
142+ for i in range (0 , len (COMPRESSED_XZ ), 10 ):
143+ self .assertFalse (lzd .eof )
144+ out .append (lzd .decompress (b'' ))
145+ out .append (lzd .decompress (b'' ))
146+ out .append (lzd .decompress (b'' ))
147+ out .append (lzd .decompress (COMPRESSED_XZ [i :i + 10 ]))
148+ out = b"" .join (out )
149+ self .assertEqual (out , INPUT )
150+ self .assertEqual (lzd .check , lzma .CHECK_CRC64 )
151+ self .assertTrue (lzd .eof )
152+ self .assertEqual (lzd .unused_data , b"" )
153+
139154 def test_decompressor_chunks_maxsize (self ):
140155 lzd = LZMADecompressor ()
141156 max_length = 100
@@ -273,6 +288,16 @@ def test_roundtrip_raw(self):
273288 lzd = LZMADecompressor (lzma .FORMAT_RAW , filters = FILTERS_RAW_4 )
274289 self ._test_decompressor (lzd , cdata , lzma .CHECK_NONE )
275290
291+ def test_roundtrip_raw_empty (self ):
292+ lzc = LZMACompressor (lzma .FORMAT_RAW , filters = FILTERS_RAW_4 )
293+ cdata = lzc .compress (INPUT )
294+ cdata += lzc .compress (b'' )
295+ cdata += lzc .compress (b'' )
296+ cdata += lzc .compress (b'' )
297+ cdata += lzc .flush ()
298+ lzd = LZMADecompressor (lzma .FORMAT_RAW , filters = FILTERS_RAW_4 )
299+ self ._test_decompressor (lzd , cdata , lzma .CHECK_NONE )
300+
276301 def test_roundtrip_chunks (self ):
277302 lzc = LZMACompressor ()
278303 cdata = []
@@ -283,6 +308,19 @@ def test_roundtrip_chunks(self):
283308 lzd = LZMADecompressor ()
284309 self ._test_decompressor (lzd , cdata , lzma .CHECK_CRC64 )
285310
311+ def test_roundtrip_empty_chunks (self ):
312+ lzc = LZMACompressor ()
313+ cdata = []
314+ for i in range (0 , len (INPUT ), 10 ):
315+ cdata .append (lzc .compress (INPUT [i :i + 10 ]))
316+ cdata .append (lzc .compress (b'' ))
317+ cdata .append (lzc .compress (b'' ))
318+ cdata .append (lzc .compress (b'' ))
319+ cdata .append (lzc .flush ())
320+ cdata = b"" .join (cdata )
321+ lzd = LZMADecompressor ()
322+ self ._test_decompressor (lzd , cdata , lzma .CHECK_CRC64 )
323+
286324 # LZMADecompressor intentionally does not handle concatenated streams.
287325
288326 def test_decompressor_multistream (self ):
0 commit comments