Skip to content

Commit 82882dd

Browse files
committed
Perform os.path.abspath to result of os.fspath, use context manager
1 parent dd30c0d commit 82882dd

File tree

2 files changed

+9
-5
lines changed

2 files changed

+9
-5
lines changed

Lib/tarfile.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1468,7 +1468,9 @@ def __init__(self, name=None, mode="r", fileobj=None, format=None,
14681468
if hasattr(fileobj, "mode"):
14691469
self._mode = fileobj.mode
14701470
self._extfileobj = True
1471-
self.name = os.fspath(name) if name else None
1471+
1472+
name = os.fspath(name) if name else None
1473+
self.name = os.path.abspath(name) if name else None
14721474
self.fileobj = fileobj
14731475

14741476
# Init attributes.
@@ -1938,12 +1940,13 @@ def add(self, name, arcname=None, recursive=True, *, filter=None):
19381940
excluded from the archive.
19391941
"""
19401942
self._check("awx")
1943+
name = os.fspath(name)
19411944

19421945
if arcname is None:
19431946
arcname = name
19441947

19451948
# Skip if somebody tries to archive the archive...
1946-
if self.name is not None and os.fspath(name) == self.name:
1949+
if self.name is not None and os.path.abspath(name) == self.name:
19471950
self._dbg(2, "tarfile: Skipped %r" % name)
19481951
return
19491952

Lib/test/test_tarfile.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1422,9 +1422,10 @@ def test_file_mode(self):
14221422
os.umask(original_umask)
14231423

14241424
def test_open_by_path_object(self):
1425-
# Test for issue #37144: broken open for stream write by path-like object
1426-
tar = tarfile.open(pathlib.Path(tmpname), self.mode)
1427-
tar.close()
1425+
# Test for issue #37144:
1426+
# broken open for stream write by path-like object
1427+
with tarfile.open(pathlib.Path(tmpname), self.mode):
1428+
pass
14281429

14291430
class GzipStreamWriteTest(GzipTest, StreamWriteTest):
14301431
pass

0 commit comments

Comments
 (0)