diff -r 0a9143d7b097 Lib/zipfile.py --- a/Lib/zipfile.py Thu May 03 13:43:07 2012 +0200 +++ b/Lib/zipfile.py Sun May 13 20:31:12 2012 +0200 @@ -656,12 +656,13 @@ buf += self._read1(self.MAX_N) return buf - n -= len(self._readbuffer) - self._offset - if n < 0: + n += self._offset + if n < len(self._readbuffer): buf = self._readbuffer[self._offset:n] - self._offset += len(buf) + self._offset = n return buf + n -= len(self._readbuffer) buf = self._readbuffer[self._offset:] self._readbuffer = b'' self._offset = 0 @@ -697,12 +698,13 @@ buf += data return buf - n -= len(self._readbuffer) - self._offset - if n < 0: + n += self._offset + if n < len(self._readbuffer): buf = self._readbuffer[self._offset:n] - self._offset += len(buf) + self._offset = n return buf + n -= len(self._readbuffer) buf = self._readbuffer[self._offset:] self._readbuffer = b'' self._offset = 0