Karthikeyan Singaravelan <tir.kar...@gmail.com> added the comment: It's also reproducible on master. git blame tells me this is introduced with feccdb2a249a71be330765be77dee57121866779 (https://bugs.python.org/issue29774)
➜ cpython git:(master) commit feccdb2a249a71be330765be77dee57121866779 Author: Serhiy Storchaka <storch...@gmail.com> Date: Thu Mar 9 18:34:03 2017 +0200 bpo-29774: Improve error reporting for corrupted extra field in ZIP file. (#583) diff --git a/Lib/zipfile.py b/Lib/zipfile.py index b5c16dbc12..8a19ca246b 100644 --- a/Lib/zipfile.py +++ b/Lib/zipfile.py @@ -438,7 +438,9 @@ class ZipInfo (object): unpack = struct.unpack while len(extra) >= 4: tp, ln = unpack('<HH', extra[:4]) - if tp == 1: + if ln+4 > len(extra): + raise BadZipFile("Corrupt extra field %04x (size=%d)" % (tp, ln)) + if tp == 0x0001: if ln >= 24: counts = unpack('<QQQ', extra[4:28]) elif ln == 16: # Master branch ➜ cpython git:(master) ./python.exe Python 3.8.0a0 (heads/master:874809ea38, Sep 7 2018, 21:03:18) [Clang 7.0.2 (clang-700.1.81)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> ➜ cpython git:(master) ./python.exe ../backups/bpo34606.py 36.zip 3.8.0a0 (heads/master:874809ea38, Sep 7 2018, 21:03:18) [Clang 7.0.2 (clang-700.1.81)] 36.zip Traceback (most recent call last): File "../backups/bpo34606.py", line 14, in <module> zipfile.ZipFile(fn) File "/Users/karthikeyansingaravelan/stuff/python/cpython/Lib/zipfile.py", line 1204, in __init__ self._RealGetContents() File "/Users/karthikeyansingaravelan/stuff/python/cpython/Lib/zipfile.py", line 1327, in _RealGetContents x._decodeExtra() File "/Users/karthikeyansingaravelan/stuff/python/cpython/Lib/zipfile.py", line 440, in _decodeExtra raise BadZipFile("Corrupt extra field %04x (size=%d)" % (tp, ln)) zipfile.BadZipFile: Corrupt extra field 6568 (size=27756) ➜ cpython git:(master) ✗ rm 36.zip # checkout feccdb2a249a71be330765be77dee57121866779 ➜ cpython git:(master) git checkout feccdb2a249a71be330765be77dee57121866779 Lib/zipfile.py ➜ cpython git:(master) ✗ ./python.exe ../backups/bpo34606.py 36.zip 3.8.0a0 (heads/master:874809ea38, Sep 7 2018, 21:03:18) [Clang 7.0.2 (clang-700.1.81)] 36.zip Traceback (most recent call last): File "../backups/bpo34606.py", line 14, in <module> zipfile.ZipFile(fn) File "/Users/karthikeyansingaravelan/stuff/python/cpython/Lib/zipfile.py", line 1105, in __init__ self._RealGetContents() File "/Users/karthikeyansingaravelan/stuff/python/cpython/Lib/zipfile.py", line 1230, in _RealGetContents x._decodeExtra() File "/Users/karthikeyansingaravelan/stuff/python/cpython/Lib/zipfile.py", line 442, in _decodeExtra raise BadZipFile("Corrupt extra field %04x (size=%d)" % (tp, ln)) zipfile.BadZipFile: Corrupt extra field 6568 (size=27756) ➜ cpython git:(master) ✗ rm 36.zip # checkout feccdb2a249a71be330765be77dee57121866779~1 ➜ cpython git:(master) ✗ git checkout feccdb2a249a71be330765be77dee57121866779~1 Lib/zipfile.py ➜ cpython git:(master) ✗ ./python.exe ../backups/bpo34606.py 36.zip 3.8.0a0 (heads/master:874809ea38, Sep 7 2018, 21:03:18) [Clang 7.0.2 (clang-700.1.81)] 36.zip ➜ cpython git:(master) ✗ gsha256sum 36.zip 0f54bd6ab84facfeefc2c38f12c30eb84101b3be3d91f8826f6fa36e73b86cb6 36.zip Hope this helps. I am adding Serhiy who might have a better explanation. @Serhiy Feel free to unassign yourself if this is irrelevant. Thanks ---------- nosy: +serhiy.storchaka _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue34606> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com