From 3f8c6913b82ed9c05e57175bcbfeacde46c598e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20Schoentgen?= Date: Sun, 29 Jul 2018 20:26:52 +0200 Subject: bpo-34035: Fix several AttributeError in zipfile seek() methods. (GH-8527) --- Lib/test/test_zipfile.py | 4 ++++ Lib/zipfile.py | 7 +++---- Misc/ACKS | 1 + Misc/NEWS.d/next/Library/2018-07-28-15-00-31.bpo-34035.75nW0H.rst | 1 + 4 files changed, 9 insertions(+), 4 deletions(-) create mode 100644 Misc/NEWS.d/next/Library/2018-07-28-15-00-31.bpo-34035.75nW0H.rst diff --git a/Lib/test/test_zipfile.py b/Lib/test/test_zipfile.py index 61c3e34..ac9a4ff 100644 --- a/Lib/test/test_zipfile.py +++ b/Lib/test/test_zipfile.py @@ -1646,6 +1646,8 @@ class OtherTests(unittest.TestCase): self.assertEqual(fp.read(5), txt[bloc:bloc+5]) fp.seek(0, os.SEEK_END) self.assertEqual(fp.tell(), len(txt)) + fp.seek(0, os.SEEK_SET) + self.assertEqual(fp.tell(), 0) # Check seek on memory file data = io.BytesIO() with zipfile.ZipFile(data, mode="w") as zipf: @@ -1661,6 +1663,8 @@ class OtherTests(unittest.TestCase): self.assertEqual(fp.read(5), txt[bloc:bloc+5]) fp.seek(0, os.SEEK_END) self.assertEqual(fp.tell(), len(txt)) + fp.seek(0, os.SEEK_SET) + self.assertEqual(fp.tell(), 0) def tearDown(self): unlink(TESTFN) diff --git a/Lib/zipfile.py b/Lib/zipfile.py index b90b60f..2757ce9 100644 --- a/Lib/zipfile.py +++ b/Lib/zipfile.py @@ -701,11 +701,11 @@ class _SharedFile: def seek(self, offset, whence=0): with self._lock: - if self.writing(): + if self._writing(): raise ValueError("Can't reposition in the ZIP file while " "there is an open writing handle on it. " "Close the writing handle before trying to read.") - self._file.seek(self._pos) + self._file.seek(offset, whence) self._pos = self._file.tell() return self._pos @@ -1021,14 +1021,13 @@ class ZipExtFile(io.BufferedIOBase): read_offset = 0 elif read_offset < 0: # Position is before the current position. Reset the ZipExtFile - self._fileobj.seek(self._orig_compress_start) self._running_crc = self._orig_start_crc self._compress_left = self._orig_compress_size self._left = self._orig_file_size self._readbuffer = b'' self._offset = 0 - self._decompressor = zipfile._get_decompressor(self._compress_type) + self._decompressor = _get_decompressor(self._compress_type) self._eof = False read_offset = new_pos diff --git a/Misc/ACKS b/Misc/ACKS index 2cf5e10..0b0bb3a 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -1435,6 +1435,7 @@ Michael Schneider Peter Schneider-Kamp Arvin Schnell Nofar Schnider +Mickaël Schoentgen Ed Schouten Scott Schram Robin Schreiber diff --git a/Misc/NEWS.d/next/Library/2018-07-28-15-00-31.bpo-34035.75nW0H.rst b/Misc/NEWS.d/next/Library/2018-07-28-15-00-31.bpo-34035.75nW0H.rst new file mode 100644 index 0000000..b66d281 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2018-07-28-15-00-31.bpo-34035.75nW0H.rst @@ -0,0 +1 @@ +Fix several AttributeError in zipfile seek() methods. Patch by Mickaël Schoentgen. -- cgit v0.12