do = zlib.decompressobj(wbits=-zlib.MAX_WBITS)
# Read all the data except the header
decompressed = do.decompress(data[fp.tell():])
+ if not do.eof or len(do.unused_data) < 8:
+ raise EOFError("Compressed file ended before the end-of-stream "
+ "marker was reached")
crc, length = struct.unpack("<II", do.unused_data[:8])
if crc != zlib.crc32(decompressed):
raise BadGzipFile("CRC check failed")
datac = gzip.compress(data)
self.assertEqual(gzip.decompress(datac), data)
+ def test_decompress_truncated_trailer(self):
+ compressed_data = gzip.compress(data1)
+ self.assertRaises(EOFError, gzip.decompress, compressed_data[:-4])
+
+ def test_decompress_missing_trailer(self):
+ compressed_data = gzip.compress(data1)
+ self.assertRaises(EOFError, gzip.decompress, compressed_data[:-8])
+
def test_read_truncated(self):
data = data1*50
# Drop the CRC (4 bytes) and file size (4 bytes).