diff options
author | Tim Hatch <tim@timhatch.com> | 2024-03-28 06:54:51 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-28 06:54:51 (GMT) |
commit | b44898299a2ed97045c270f6474785da2ff07ced (patch) | |
tree | 3cca65e4c9fbf1d34ed10d8656609d5370e23cdc /Lib/importlib | |
parent | 2cedd25c14d3acfdcb5e8ee55132ce3e334ab8fe (diff) | |
download | cpython-b44898299a2ed97045c270f6474785da2ff07ced.zip cpython-b44898299a2ed97045c270f6474785da2ff07ced.tar.gz cpython-b44898299a2ed97045c270f6474785da2ff07ced.tar.bz2 |
gh-89739: gh-77140: Support zip64 in zipimport (GH-94146)
* Reads zip64 files as produced by the zipfile module
* Include tests (somewhat slow, however, because of the need to create "large" zips)
* About the same amount of strictness reading invalid zip files as zipfile has
* Still works on files with prepended data (like pex)
There are a lot more test cases at https://github.com/thatch/zipimport64/ that give me confidence that this works for real-world files.
Fixes #89739 and #77140.
---------
Co-authored-by: Itamar Ostricher <itamarost@gmail.com>
Reviewed-by: Gregory P. Smith <greg@krypto.org>
Diffstat (limited to 'Lib/importlib')
-rw-r--r-- | Lib/importlib/_bootstrap_external.py | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/Lib/importlib/_bootstrap_external.py b/Lib/importlib/_bootstrap_external.py index 4749a62..0a11dc9 100644 --- a/Lib/importlib/_bootstrap_external.py +++ b/Lib/importlib/_bootstrap_external.py @@ -81,6 +81,11 @@ def _pack_uint32(x): return (int(x) & 0xFFFFFFFF).to_bytes(4, 'little') +def _unpack_uint64(data): + """Convert 8 bytes in little-endian to an integer.""" + assert len(data) == 8 + return int.from_bytes(data, 'little') + def _unpack_uint32(data): """Convert 4 bytes in little-endian to an integer.""" assert len(data) == 4 |