Detect unsupported compression types.
This commit is contained in:
parent
f6b16a4b50
commit
b3260f08cf
|
@ -992,6 +992,17 @@ class OtherTests(unittest.TestCase):
|
||||||
caught."""
|
caught."""
|
||||||
self.assertRaises(RuntimeError, zipfile.ZipFile, TESTFN, "w", -1)
|
self.assertRaises(RuntimeError, zipfile.ZipFile, TESTFN, "w", -1)
|
||||||
|
|
||||||
|
def test_unsupported_compression(self):
|
||||||
|
# data is declared as shrunk, but actually deflated
|
||||||
|
data = (b'PK\x03\x04.\x00\x00\x00\x01\x00\xe4C\xa1@\x00\x00\x00'
|
||||||
|
b'\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00x\x03\x00PK\x01'
|
||||||
|
b'\x02.\x03.\x00\x00\x00\x01\x00\xe4C\xa1@\x00\x00\x00\x00\x02\x00\x00'
|
||||||
|
b'\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
|
||||||
|
b'\x80\x01\x00\x00\x00\x00xPK\x05\x06\x00\x00\x00\x00\x01\x00\x01\x00'
|
||||||
|
b'/\x00\x00\x00!\x00\x00\x00\x00\x00')
|
||||||
|
with zipfile.ZipFile(io.BytesIO(data), 'r') as zipf:
|
||||||
|
self.assertRaises(NotImplementedError, zipf.open, 'x')
|
||||||
|
|
||||||
def test_null_byte_in_filename(self):
|
def test_null_byte_in_filename(self):
|
||||||
"""Check that a filename containing a null byte is properly
|
"""Check that a filename containing a null byte is properly
|
||||||
terminated."""
|
terminated."""
|
||||||
|
|
|
@ -504,12 +504,29 @@ def _get_compressor(compress_type):
|
||||||
|
|
||||||
|
|
||||||
def _get_decompressor(compress_type):
|
def _get_decompressor(compress_type):
|
||||||
if compress_type == ZIP_DEFLATED:
|
if compress_type == ZIP_STORED:
|
||||||
|
return None
|
||||||
|
elif compress_type == ZIP_DEFLATED:
|
||||||
return zlib.decompressobj(-15)
|
return zlib.decompressobj(-15)
|
||||||
elif compress_type == ZIP_BZIP2:
|
elif compress_type == ZIP_BZIP2:
|
||||||
return bz2.BZ2Decompressor()
|
return bz2.BZ2Decompressor()
|
||||||
else:
|
else:
|
||||||
return None
|
unknown_compressors = {
|
||||||
|
1: 'shrink',
|
||||||
|
2: 'reduce',
|
||||||
|
3: 'reduce',
|
||||||
|
4: 'reduce',
|
||||||
|
5: 'reduce',
|
||||||
|
6: 'implode',
|
||||||
|
9: 'enhanced deflate',
|
||||||
|
10: 'implode',
|
||||||
|
14: 'lzma',
|
||||||
|
}
|
||||||
|
descr = unknown_compressors.get(compress_type)
|
||||||
|
if descr:
|
||||||
|
raise NotImplementedError("compression type %d (%s)" % (compress_type, descr))
|
||||||
|
else:
|
||||||
|
raise NotImplementedError("compression type %d" % (compress_type,))
|
||||||
|
|
||||||
|
|
||||||
class ZipExtFile(io.BufferedIOBase):
|
class ZipExtFile(io.BufferedIOBase):
|
||||||
|
|
Loading…
Reference in New Issue