Mercurial > cpython
changeset 88364:79ea4ce431b1
Issue #20078: Reading malformed zipfiles no longer hangs with 100% CPU
consumption. [#20078]
| author | Serhiy Storchaka <storchaka@gmail.com> |
|---|---|
| date | Thu, 09 Jan 2014 14:53:41 +0200 |
| parents | 9e3f5b5bcf7e (current diff) 0cf1defd5ac4 (diff) |
| children | a1a5c4274c1c |
| files | Lib/test/test_zipfile.py Lib/zipfile.py Misc/NEWS |
| diffstat | 3 files changed, 36 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/Lib/test/test_zipfile.py +++ b/Lib/test/test_zipfile.py @@ -297,6 +297,36 @@ class AbstractTestsWithSourceFile: buf = fp.read(test_size) self.assertEqual(len(buf), test_size) + def test_truncated_zipfile(self): + fp = io.BytesIO() + with zipfile.ZipFile(fp, mode='w') as zipf: + zipf.writestr('strfile', self.data, compress_type=self.compression) + end_offset = fp.tell() + zipfiledata = fp.getvalue() + + fp = io.BytesIO(zipfiledata) + with zipfile.ZipFile(fp) as zipf: + with zipf.open('strfile') as zipopen: + fp.truncate(end_offset - 20) + with self.assertRaises(EOFError): + zipopen.read() + + fp = io.BytesIO(zipfiledata) + with zipfile.ZipFile(fp) as zipf: + with zipf.open('strfile') as zipopen: + fp.truncate(end_offset - 20) + with self.assertRaises(EOFError): + while zipopen.read(100): + pass + + fp = io.BytesIO(zipfiledata) + with zipfile.ZipFile(fp) as zipf: + with zipf.open('strfile') as zipopen: + fp.truncate(end_offset - 20) + with self.assertRaises(EOFError): + while zipopen.read1(100): + pass + def tearDown(self): unlink(TESTFN) unlink(TESTFN2) @@ -393,6 +423,7 @@ class StoredTestsWithSourceFile(Abstract with zipfile.ZipFile(TESTFN2, "w") as zipfp: self.assertRaises(ValueError, zipfp.write, TESTFN) + @requires_zlib class DeflateTestsWithSourceFile(AbstractTestsWithSourceFile, unittest.TestCase):
