From: Lars Gustäbel Date: Wed, 18 Nov 2009 21:09:35 +0000 (+0000) Subject: Merged revisions 76381 via svnmerge from X-Git-Tag: v2.6.5rc1~339 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7cf2c804675ba8def75f166ff972b1f3f4ea8418;p=python Merged revisions 76381 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r76381 | lars.gustaebel | 2009-11-18 21:24:54 +0100 (Wed, 18 Nov 2009) | 3 lines Issue #7341: Close the internal file object in the TarFile constructor in case of an error. ........ --- diff --git a/Lib/tarfile.py b/Lib/tarfile.py index 687ef81484..7643a0bc64 100644 --- a/Lib/tarfile.py +++ b/Lib/tarfile.py @@ -1565,27 +1565,33 @@ class TarFile(object): self.inodes = {} # dictionary caching the inodes of # archive members already added - if self.mode == "r": - self.firstmember = None - self.firstmember = self.next() - - if self.mode == "a": - # Move to the end of the archive, - # before the first empty block. - self.firstmember = None - while True: - if self.next() is None: - if self.offset > 0: - self.fileobj.seek(- BLOCKSIZE, 1) - break - - if self.mode in "aw": - self._loaded = True - - if self.pax_headers: - buf = self.tarinfo.create_pax_global_header(self.pax_headers.copy()) - self.fileobj.write(buf) - self.offset += len(buf) + try: + if self.mode == "r": + self.firstmember = None + self.firstmember = self.next() + + if self.mode == "a": + # Move to the end of the archive, + # before the first empty block. + self.firstmember = None + while True: + if self.next() is None: + if self.offset > 0: + self.fileobj.seek(- BLOCKSIZE, 1) + break + + if self.mode in "aw": + self._loaded = True + + if self.pax_headers: + buf = self.tarinfo.create_pax_global_header(self.pax_headers.copy()) + self.fileobj.write(buf) + self.offset += len(buf) + except: + if not self._extfileobj: + self.fileobj.close() + self.closed = True + raise def _getposix(self): return self.format == USTAR_FORMAT diff --git a/Misc/NEWS b/Misc/NEWS index aecf5ca589..c75f369981 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -26,6 +26,9 @@ Core and Builtins Library ------- +- Issue #7341: Close the internal file object in the TarFile constructor in + case of an error. + - Issue #7328: pydoc no longer corrupts sys.path when run with the '-m' switch - Issue #7318: multiprocessing now uses a timeout when it fails to establish