diff options
author | Jokimax <77680901+Jokimax@users.noreply.github.com> | 2023-10-24 21:15:42 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-10-24 21:15:42 (GMT) |
commit | c73b0f35602abf5f283bf64266641f19bc82fce0 (patch) | |
tree | 6ea01fed896eed84ea5c710604270b682588b8b9 /Lib/zipfile | |
parent | e5168ff3f8abe651d0a96d9e2d49028183e21b15 (diff) | |
download | cpython-c73b0f35602abf5f283bf64266641f19bc82fce0.zip cpython-c73b0f35602abf5f283bf64266641f19bc82fce0.tar.gz cpython-c73b0f35602abf5f283bf64266641f19bc82fce0.tar.bz2 |
gh-102956: Fix returning of empty byte strings after seek in zipfile … (#103565)
gh-102956: Fix returning of empty byte strings after seek in zipfile module. This was a regression in 3.12.0 due to a performance enhancement.
Diffstat (limited to 'Lib/zipfile')
-rw-r--r-- | Lib/zipfile/__init__.py | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/Lib/zipfile/__init__.py b/Lib/zipfile/__init__.py index 995d267..2b28a07 100644 --- a/Lib/zipfile/__init__.py +++ b/Lib/zipfile/__init__.py @@ -1136,8 +1136,12 @@ class ZipExtFile(io.BufferedIOBase): read_offset = new_pos - curr_pos buff_offset = read_offset + self._offset + if buff_offset >= 0 and buff_offset < len(self._readbuffer): + # Just move the _offset index if the new position is in the _readbuffer + self._offset = buff_offset + read_offset = 0 # Fast seek uncompressed unencrypted file - if self._compress_type == ZIP_STORED and self._decrypter is None and read_offset > 0: + elif self._compress_type == ZIP_STORED and self._decrypter is None and read_offset > 0: # disable CRC checking after first seeking - it would be invalid self._expected_crc = None # seek actual file taking already buffered data into account @@ -1148,10 +1152,6 @@ class ZipExtFile(io.BufferedIOBase): # flush read buffer self._readbuffer = b'' self._offset = 0 - elif buff_offset >= 0 and buff_offset < len(self._readbuffer): - # Just move the _offset index if the new position is in the _readbuffer - self._offset = buff_offset - read_offset = 0 elif read_offset < 0: # Position is before the current position. Reset the ZipExtFile self._fileobj.seek(self._orig_compress_start) |