Commit 7ecd13da authored by Andrew Svetlov's avatar Andrew Svetlov

Merge issue #16477: Close tarfile internal handlers in case of exception.

Patch by Serhiy Storchaka.
parents 159f12e3 718df1d6
...@@ -1924,9 +1924,8 @@ class TarFile(object): ...@@ -1924,9 +1924,8 @@ class TarFile(object):
# Append the tar header and data to the archive. # Append the tar header and data to the archive.
if tarinfo.isreg(): if tarinfo.isreg():
f = bltn_open(name, "rb") with bltn_open(name, "rb") as f:
self.addfile(tarinfo, f) self.addfile(tarinfo, f)
f.close()
elif tarinfo.isdir(): elif tarinfo.isdir():
self.addfile(tarinfo) self.addfile(tarinfo)
...@@ -2131,7 +2130,7 @@ class TarFile(object): ...@@ -2131,7 +2130,7 @@ class TarFile(object):
""" """
source = self.fileobj source = self.fileobj
source.seek(tarinfo.offset_data) source.seek(tarinfo.offset_data)
target = bltn_open(targetpath, "wb") with bltn_open(targetpath, "wb") as target:
if tarinfo.sparse is not None: if tarinfo.sparse is not None:
for offset, size in tarinfo.sparse: for offset, size in tarinfo.sparse:
target.seek(offset) target.seek(offset)
...@@ -2140,7 +2139,6 @@ class TarFile(object): ...@@ -2140,7 +2139,6 @@ class TarFile(object):
copyfileobj(source, target, tarinfo.size) copyfileobj(source, target, tarinfo.size)
target.seek(tarinfo.size) target.seek(tarinfo.size)
target.truncate() target.truncate()
target.close()
def makeunknown(self, tarinfo, targetpath): def makeunknown(self, tarinfo, targetpath):
"""Make a file from a TarInfo object with an unknown type """Make a file from a TarInfo object with an unknown type
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment