mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
Merge issue #16477: Close tarfile internal handlers in case of exception.
Patch by Serhiy Storchaka.
This commit is contained in:
commit
7030dd8500
1 changed files with 11 additions and 13 deletions
|
@ -1924,9 +1924,8 @@ class TarFile(object):
|
|||
|
||||
# Append the tar header and data to the archive.
|
||||
if tarinfo.isreg():
|
||||
f = bltn_open(name, "rb")
|
||||
self.addfile(tarinfo, f)
|
||||
f.close()
|
||||
with bltn_open(name, "rb") as f:
|
||||
self.addfile(tarinfo, f)
|
||||
|
||||
elif tarinfo.isdir():
|
||||
self.addfile(tarinfo)
|
||||
|
@ -2131,16 +2130,15 @@ class TarFile(object):
|
|||
"""
|
||||
source = self.fileobj
|
||||
source.seek(tarinfo.offset_data)
|
||||
target = bltn_open(targetpath, "wb")
|
||||
if tarinfo.sparse is not None:
|
||||
for offset, size in tarinfo.sparse:
|
||||
target.seek(offset)
|
||||
copyfileobj(source, target, size)
|
||||
else:
|
||||
copyfileobj(source, target, tarinfo.size)
|
||||
target.seek(tarinfo.size)
|
||||
target.truncate()
|
||||
target.close()
|
||||
with bltn_open(targetpath, "wb") as target:
|
||||
if tarinfo.sparse is not None:
|
||||
for offset, size in tarinfo.sparse:
|
||||
target.seek(offset)
|
||||
copyfileobj(source, target, size)
|
||||
else:
|
||||
copyfileobj(source, target, tarinfo.size)
|
||||
target.seek(tarinfo.size)
|
||||
target.truncate()
|
||||
|
||||
def makeunknown(self, tarinfo, targetpath):
|
||||
"""Make a file from a TarInfo object with an unknown type
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue