Commit 2f1b8575 authored by Berker Peksag's avatar Berker Peksag Committed by Gregory P. Smith

bpo-36991: Fix incorrect exception escaping ZipFile.extract() (GH-13632)

parent 99b54d68
...@@ -9,6 +9,7 @@ import subprocess ...@@ -9,6 +9,7 @@ import subprocess
import sys import sys
import time import time
import unittest import unittest
import unittest.mock as mock
import zipfile import zipfile
...@@ -1766,6 +1767,16 @@ class OtherTests(unittest.TestCase): ...@@ -1766,6 +1767,16 @@ class OtherTests(unittest.TestCase):
fp.seek(0, os.SEEK_SET) fp.seek(0, os.SEEK_SET)
self.assertEqual(fp.tell(), 0) self.assertEqual(fp.tell(), 0)
@requires_bz2
def test_decompress_without_3rd_party_library(self):
data = b'PK\x05\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
zip_file = io.BytesIO(data)
with zipfile.ZipFile(zip_file, 'w', compression=zipfile.ZIP_BZIP2) as zf:
zf.writestr('a.txt', b'a')
with mock.patch('zipfile.bz2', None):
with zipfile.ZipFile(zip_file) as zf:
self.assertRaises(RuntimeError, zf.extract, 'a.txt')
def tearDown(self): def tearDown(self):
unlink(TESTFN) unlink(TESTFN)
unlink(TESTFN2) unlink(TESTFN2)
......
...@@ -703,6 +703,7 @@ def _get_compressor(compress_type, compresslevel=None): ...@@ -703,6 +703,7 @@ def _get_compressor(compress_type, compresslevel=None):
def _get_decompressor(compress_type): def _get_decompressor(compress_type):
_check_compression(compress_type)
if compress_type == ZIP_STORED: if compress_type == ZIP_STORED:
return None return None
elif compress_type == ZIP_DEFLATED: elif compress_type == ZIP_DEFLATED:
......
Fixes a potential incorrect AttributeError exception escaping
ZipFile.extract() in some unsupported input error situations.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment