diff options
author | Łukasz Langa <lukasz@langa.pl> | 2010-11-23 00:15:02 (GMT) |
---|---|---|
committer | Łukasz Langa <lukasz@langa.pl> | 2010-11-23 00:15:02 (GMT) |
commit | a9f054b423cd2c8b7b37cd28ad7017ff84bede7b (patch) | |
tree | 1d49d55959774e3437c30059cb26018f57b24f61 /Lib/zipfile.py | |
parent | e94980a64fe8db4170482f14eb165b46def733c8 (diff) | |
download | cpython-a9f054b423cd2c8b7b37cd28ad7017ff84bede7b.zip cpython-a9f054b423cd2c8b7b37cd28ad7017ff84bede7b.tar.gz cpython-a9f054b423cd2c8b7b37cd28ad7017ff84bede7b.tar.bz2 |
zipfile: remove remaining ResourceWarnings
Diffstat (limited to 'Lib/zipfile.py')
-rw-r--r-- | Lib/zipfile.py | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/Lib/zipfile.py b/Lib/zipfile.py index eec8ece..bfe41b7 100644 --- a/Lib/zipfile.py +++ b/Lib/zipfile.py @@ -897,10 +897,8 @@ class ZipFile: # given a file object in the constructor if self._filePassed: zef_file = self.fp - should_close = False else: zef_file = io.open(self.filename, 'rb') - should_close = True # Make sure we have an info object if isinstance(name, ZipInfo): @@ -908,8 +906,12 @@ class ZipFile: zinfo = name else: # Get info object for name - zinfo = self.getinfo(name) - + try: + zinfo = self.getinfo(name) + except KeyError: + if not self._filePassed: + zef_file.close() + raise zef_file.seek(zinfo.header_offset, 0) # Skip the file header: @@ -923,6 +925,8 @@ class ZipFile: zef_file.read(fheader[_FH_EXTRA_FIELD_LENGTH]) if fname != zinfo.orig_filename.encode("utf-8"): + if not self._filePassed: + zef_file.close() raise BadZipFile( 'File name in directory %r and header %r differ.' % (zinfo.orig_filename, fname)) @@ -934,6 +938,8 @@ class ZipFile: if not pwd: pwd = self.pwd if not pwd: + if not self._filePassed: + zef_file.close() raise RuntimeError("File %s is encrypted, " "password required for extraction" % name) @@ -952,9 +958,12 @@ class ZipFile: # compare against the CRC otherwise check_byte = (zinfo.CRC >> 24) & 0xff if h[11] != check_byte: + if not self._filePassed: + zef_file.close() raise RuntimeError("Bad password for file", name) - return ZipExtFile(zef_file, mode, zinfo, zd, close_fileobj=should_close) + return ZipExtFile(zef_file, mode, zinfo, zd, + close_fileobj=not self._filePassed) def extract(self, member, path=None, pwd=None): """Extract a member from the archive to the current working directory, |