From d105196c728110879b92984feb198b0bd600aaf9 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sat, 21 Dec 2013 23:51:15 +0200 Subject: [PATCH] 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. --- Lib/zipfile.py | 6 +++++- Misc/NEWS | 3 +++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/Lib/zipfile.py b/Lib/zipfile.py index 6639317537b..82d240f4669 100644 --- a/Lib/zipfile.py +++ b/Lib/zipfile.py @@ -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] diff --git a/Misc/NEWS b/Misc/NEWS index 3efaa741de7..aed2112c9fa 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -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.