diff -r 955547e57cff Lib/tarfile.py --- a/Lib/tarfile.py Sun Mar 13 19:32:21 2011 +0100 +++ b/Lib/tarfile.py Tue Mar 15 14:09:30 2011 -0400 @@ -1804,11 +1804,11 @@ fileobj = gzip.GzipFile(name, mode + "b", compresslevel, fileobj) t = cls.taropen(name, mode, fileobj, **kwargs) except IOError: - if not extfileobj: + if not extfileobj and fileobj is not None: fileobj.close() raise ReadError("not a gzip file") except: - if not extfileobj: + if not extfileobj and fileobj is not None: fileobj.close() raise t._extfileobj = extfileobj diff -r 955547e57cff Lib/test/test_tarfile.py --- a/Lib/test/test_tarfile.py Sun Mar 13 19:32:21 2011 +0100 +++ b/Lib/test/test_tarfile.py Tue Mar 15 14:09:30 2011 -0400 @@ -1652,6 +1652,12 @@ class GzipMiscReadTest(MiscReadTest): tarname = gzipname mode = "r:gz" + + def test_non_existent_targz_file(self): + # Test for issue11513: prevent non-existent gzipped tarfiles raising + # multiple exceptions. + self.assertRaises(tarfile.ReadError, tarfile.open, "xxx", self.mode) + class GzipUstarReadTest(UstarReadTest): tarname = gzipname mode = "r:gz"