diff options
| author | Daniel Hillier <daniel.hillier@gmail.com> | 2019-11-30 19:30:47 +1100 |
|---|---|---|
| committer | Serhiy Storchaka <storchaka@gmail.com> | 2019-11-30 10:30:47 +0200 |
| commit | 8d62df60d8733d0fa9aee14ef746d0009a7a9726 (patch) | |
| tree | 313fcbd540496aaf81650be5a189cbc8abeee63e /Lib/zipfile.py | |
| parent | 1df65f7c6c00dfae9286c7a58e1b3803e3af33e5 (diff) | |
| download | cpython-git-8d62df60d8733d0fa9aee14ef746d0009a7a9726.tar.gz | |
bpo-37523: Raise ValueError for I/O operations on a closed zipfile.ZipExtFile. (GH-14658)
Raises ValueError when calling the following on a closed zipfile.ZipExtFile: read, readable, seek, seekable, tell.
Diffstat (limited to 'Lib/zipfile.py')
| -rw-r--r-- | Lib/zipfile.py | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/Lib/zipfile.py b/Lib/zipfile.py index b0afb9da94..e1d07f2a52 100644 --- a/Lib/zipfile.py +++ b/Lib/zipfile.py @@ -889,12 +889,16 @@ class ZipExtFile(io.BufferedIOBase): return self._readbuffer[self._offset: self._offset + 512] def readable(self): + if self.closed: + raise ValueError("I/O operation on closed file.") return True def read(self, n=-1): """Read and return up to n bytes. If the argument is omitted, None, or negative, data is read and returned until EOF is reached. """ + if self.closed: + raise ValueError("read from closed file.") if n is None or n < 0: buf = self._readbuffer[self._offset:] self._readbuffer = b'' @@ -1031,9 +1035,13 @@ class ZipExtFile(io.BufferedIOBase): super().close() def seekable(self): + if self.closed: + raise ValueError("I/O operation on closed file.") return self._seekable def seek(self, offset, whence=0): + if self.closed: + raise ValueError("seek on closed file.") if not self._seekable: raise io.UnsupportedOperation("underlying stream is not seekable") curr_pos = self.tell() @@ -1082,6 +1090,8 @@ class ZipExtFile(io.BufferedIOBase): return self.tell() def tell(self): + if self.closed: + raise ValueError("tell on closed file.") if not self._seekable: raise io.UnsupportedOperation("underlying stream is not seekable") filepos = self._orig_file_size - self._left - len(self._readbuffer) + self._offset |
