Issue #20048: Fixed ZipExtFile.peek() when it is called on the boundary of

the uncompress buffer and read() goes through more than one readbuffer.

This is partial backport of changeset 028e8e0b03e8.
This commit is contained in:
Serhiy Storchaka 2013-12-21 23:51:15 +02:00
parent 0e4d852abf
commit d105196c72
2 changed files with 8 additions and 1 deletions

View File

@ -606,7 +606,11 @@ class ZipExtFile(io.BufferedIOBase):
"""Returns buffered bytes without advancing the position."""
if n > len(self._readbuffer) - self._offset:
chunk = self.read(n)
self._offset -= len(chunk)
if len(chunk) > self._offset:
self._readbuffer = chunk + self._readbuffer[self._offset:]
self._offset = 0
else:
self._offset -= len(chunk)
# Return up to 512 bytes to reduce allocation overhead for tight loops.
return self._readbuffer[self._offset: self._offset + 512]

View File

@ -27,6 +27,9 @@ Core and Builtins
Library
-------
- Issue #20048: Fixed ZipExtFile.peek() when it is called on the boundary of
the uncompress buffer and read() goes through more than one readbuffer.
- Issue #20034: Updated alias mapping to most recent locale.alias file
from X.org distribution using makelocalealias.py.