diff --git a/Lib/zipfile/__init__.py b/Lib/zipfile/__init__.py index 084a47518a935c..418933a2e8d9e8 100644 --- a/Lib/zipfile/__init__.py +++ b/Lib/zipfile/__init__.py @@ -418,6 +418,15 @@ def _sanitize_filename(filename): filename = filename.replace(os.altsep, "/") return filename +def _read_local_file_header(fp): + fheader = fp.read(sizeFileHeader) + if len(fheader) != sizeFileHeader: + raise BadZipFile("Truncated file header") + fheader = struct.unpack(structFileHeader, fheader) + if fheader[_FH_SIGNATURE] != stringFileHeader: + raise BadZipFile("Bad magic number for file header") + return fheader + class ZipInfo: """Class with attributes describing each file in the ZIP archive.""" @@ -1648,7 +1657,7 @@ def _validate_local_file_entry_sequence(self, fp, start_offset, end_offset, chec def _validate_local_file_entry(self, fp, offset, end_offset): fp.seek(offset) try: - fheader = self._read_local_file_header(fp) + fheader = _read_local_file_header(fp) except BadZipFile: return None @@ -1714,15 +1723,6 @@ def _validate_local_file_entry(self, fp, offset, end_offset): return entry_size - def _read_local_file_header(self, fp): - fheader = fp.read(sizeFileHeader) - if len(fheader) != sizeFileHeader: - raise BadZipFile("Truncated file header") - fheader = struct.unpack(structFileHeader, fheader) - if fheader[_FH_SIGNATURE] != stringFileHeader: - raise BadZipFile("Bad magic number for file header") - return fheader - def _scan_data_descriptor(self, fp, offset, end_offset, zip64): dd_fmt = '