From: Miss Skeleton (bot) <31488909+miss-islington@users.noreply.github.com> Date: Tue, 29 Oct 2019 07:43:37 +0000 (-0700) Subject: bpo-36993: Improve error reporting for zipfiles with bad zip64 extra data. (GH-14656) X-Git-Tag: v3.7.6rc1~76 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=f7d50f8f997fbfce1556991a3700826536871fe7;p=thirdparty%2FPython%2Fcpython.git bpo-36993: Improve error reporting for zipfiles with bad zip64 extra data. (GH-14656) (cherry picked from commit da6ce58dd5ac109485af45878fca6bfd265b43e9) Co-authored-by: Daniel Hillier --- diff --git a/Lib/test/test_zipfile.py b/Lib/test/test_zipfile.py index 523a2e1dadcb..7e8e8d2c89f0 100644 --- a/Lib/test/test_zipfile.py +++ b/Lib/test/test_zipfile.py @@ -1,5 +1,6 @@ import contextlib import io +import itertools import os import importlib.util import pathlib @@ -801,6 +802,227 @@ class StoredTestZip64InSmallFiles(AbstractTestZip64InSmallFiles, zinfo = zipfp.getinfo("strfile") self.assertEqual(zinfo.extra, extra) + def make_zip64_file( + self, file_size_64_set=False, file_size_extra=False, + compress_size_64_set=False, compress_size_extra=False, + header_offset_64_set=False, header_offset_extra=False, + ): + """Generate bytes sequence for a zip with (incomplete) zip64 data. + + The actual values (not the zip 64 0xffffffff values) stored in the file + are: + file_size: 8 + compress_size: 8 + header_offset: 0 + """ + actual_size = 8 + actual_header_offset = 0 + local_zip64_fields = [] + central_zip64_fields = [] + + file_size = actual_size + if file_size_64_set: + file_size = 0xffffffff + if file_size_extra: + local_zip64_fields.append(actual_size) + central_zip64_fields.append(actual_size) + file_size = struct.pack("