mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
#14313: zipfile now raises NotImplementedError when the compression type is unknown.
This commit is contained in:
parent
355637be32
commit
9e94972eed
3 changed files with 42 additions and 0 deletions
|
@ -859,6 +859,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."""
|
||||||
|
|
|
@ -461,6 +461,28 @@ class _ZipDecrypter:
|
||||||
self._UpdateKeys(c)
|
self._UpdateKeys(c)
|
||||||
return c
|
return c
|
||||||
|
|
||||||
|
|
||||||
|
compressor_names = {
|
||||||
|
0: 'store',
|
||||||
|
1: 'shrink',
|
||||||
|
2: 'reduce',
|
||||||
|
3: 'reduce',
|
||||||
|
4: 'reduce',
|
||||||
|
5: 'reduce',
|
||||||
|
6: 'implode',
|
||||||
|
7: 'tokenize',
|
||||||
|
8: 'deflate',
|
||||||
|
9: 'deflate64',
|
||||||
|
10: 'implode',
|
||||||
|
12: 'bzip2',
|
||||||
|
14: 'lzma',
|
||||||
|
18: 'terse',
|
||||||
|
19: 'lz77',
|
||||||
|
97: 'wavpack',
|
||||||
|
98: 'ppmd',
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class ZipExtFile(io.BufferedIOBase):
|
class ZipExtFile(io.BufferedIOBase):
|
||||||
"""File-like object for reading an archive member.
|
"""File-like object for reading an archive member.
|
||||||
Is returned by ZipFile.open().
|
Is returned by ZipFile.open().
|
||||||
|
@ -487,6 +509,12 @@ class ZipExtFile(io.BufferedIOBase):
|
||||||
|
|
||||||
if self._compress_type == ZIP_DEFLATED:
|
if self._compress_type == ZIP_DEFLATED:
|
||||||
self._decompressor = zlib.decompressobj(-15)
|
self._decompressor = zlib.decompressobj(-15)
|
||||||
|
elif self._compress_type != ZIP_STORED:
|
||||||
|
descr = compressor_names.get(self._compress_type)
|
||||||
|
if descr:
|
||||||
|
raise NotImplementedError("compression type %d (%s)" % (self._compress_type, descr))
|
||||||
|
else:
|
||||||
|
raise NotImplementedError("compression type %d" % (self._compress_type,))
|
||||||
self._unconsumed = ''
|
self._unconsumed = ''
|
||||||
|
|
||||||
self._readbuffer = ''
|
self._readbuffer = ''
|
||||||
|
|
|
@ -148,6 +148,9 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #14313: zipfile now raises NotImplementedError when the compression
|
||||||
|
type is unknown.
|
||||||
|
|
||||||
- Issue #16408: Fix file descriptors not being closed in error conditions
|
- Issue #16408: Fix file descriptors not being closed in error conditions
|
||||||
in the zipfile module. Patch by Serhiy Storchaka.
|
in the zipfile module. Patch by Serhiy Storchaka.
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue