summaryrefslogtreecommitdiffstats
path: root/Lib/importlib
diff options
context:
space:
mode:
authorTim Hatch <tim@timhatch.com>2024-03-28 06:54:51 (GMT)
committerGitHub <noreply@github.com>2024-03-28 06:54:51 (GMT)
commitb44898299a2ed97045c270f6474785da2ff07ced (patch)
tree3cca65e4c9fbf1d34ed10d8656609d5370e23cdc /Lib/importlib
parent2cedd25c14d3acfdcb5e8ee55132ce3e334ab8fe (diff)
downloadcpython-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.py5
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