Issue #20244: Fixed possible file leaks when unexpected error raised in
tarfile open functions.
diff --git a/Lib/tarfile.py b/Lib/tarfile.py
index 6c40cb9..d31bc70 100755
--- a/Lib/tarfile.py
+++ b/Lib/tarfile.py
@@ -1671,6 +1671,9 @@
             if mode == 'r':
                 raise ReadError("not a bzip2 file")
             raise
+        except:
+            fileobj.close()
+            raise
         t._extfileobj = False
         return t
 
@@ -1696,6 +1699,9 @@
             if mode == 'r':
                 raise ReadError("not an lzma file")
             raise
+        except:
+            fileobj.close()
+            raise
         t._extfileobj = False
         return t