Skip to content

Commit 66b268a

Browse files
committed
bpo-44289: Keep argument file object's current position in tarfile.is_tarifle function.
1 parent 39dd141 commit 66b268a

File tree

2 files changed

+14
-0
lines changed

2 files changed

+14
-0
lines changed

Lib/tarfile.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2484,7 +2484,9 @@ def is_tarfile(name):
24842484
"""
24852485
try:
24862486
if hasattr(name, "read"):
2487+
pos = name.tell()
24872488
t = open(fileobj=name)
2489+
name.seek(pos)
24882490
else:
24892491
t = open(name)
24902492
t.close()

Lib/test/test_tarfile.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -352,6 +352,18 @@ def test_is_tarfile_valid(self):
352352
with open(self.tarname, "rb") as fobj:
353353
self.assertTrue(tarfile.is_tarfile(io.BytesIO(fobj.read())))
354354

355+
def test_is_tarfile_keeps_position(self):
356+
# Test for issue44289: tarfile.is_tarfile() modifies
357+
# file object's current position
358+
with open(self.tarname, "rb") as fobj:
359+
tarfile.is_tarfile(fobj)
360+
self.assertEqual(fobj.tell(), 0)
361+
362+
with open(self.tarname, "rb") as fobj:
363+
file_like = io.BytesIO(fobj.read())
364+
tarfile.is_tarfile(file_like)
365+
self.assertEqual(file_like.tell(), 0)
366+
355367
def test_empty_tarfile(self):
356368
# Test for issue6123: Allow opening empty archives.
357369
# This test checks if tarfile.open() is able to open an empty tar

0 commit comments

Comments
 (0)