diff -r 81f8375e60ce Lib/zipfile.py --- a/Lib/zipfile.py Fri Dec 20 18:22:38 2013 +0200 +++ b/Lib/zipfile.py Sat Dec 21 23:22:26 2013 +0200 @@ -606,7 +606,11 @@ """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]