Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Lib/tarfile.py
Original file line number Diff line number Diff line change
Expand Up @@ -498,7 +498,7 @@ def _init_read_gz(self):

if flag & 4:
xlen = ord(self.__read(1)) + 256 * ord(self.__read(1))
self.read(xlen)
self.__read(xlen)
if flag & 8:
while True:
s = self.__read(1)
Expand Down
33 changes: 31 additions & 2 deletions Lib/test/test_tarfile.py
Original file line number Diff line number Diff line change
Expand Up @@ -892,10 +892,39 @@ def test_extractall_hardlink_on_symlink(self):
self._assert_on_file_content(hardlink_filepath, sha256_regtype)


class GzipReadTestBase:

def test_read_with_extra_field(self):
with open(self.tarname, 'rb') as f:
data = bytearray(f.read())
flags = data[3]
self.assertEqual(flags, 8)
data[3] = flags | 4
data[10:10] = b'\x05\x00extra'
with open(tmpname, 'wb') as f:
f.write(data)
print(self.mode)
with tarfile.open(tmpname, mode=self.mode):
pass

def test_read_with_file_comment(self):
with open(self.tarname, 'rb') as f:
data = bytearray(f.read())
flags = data[3]
self.assertEqual(flags, 8)
data[3] = flags | 16
i = data.index(0, 10) + 1
data[i:i] = b'comment\x00'
with open(tmpname, 'wb') as f:
f.write(data)
with tarfile.open(tmpname, mode=self.mode):
pass


class MiscReadTest(MiscReadTestBase, unittest.TestCase):
test_fail_comp = None

class GzipMiscReadTest(GzipTest, MiscReadTestBase, unittest.TestCase):
class GzipMiscReadTest(GzipTest, GzipReadTestBase, MiscReadTestBase, unittest.TestCase):
pass

class Bz2MiscReadTest(Bz2Test, MiscReadTestBase, unittest.TestCase):
Expand Down Expand Up @@ -969,7 +998,7 @@ def test_compare_members(self):
finally:
tar1.close()

class GzipStreamReadTest(GzipTest, StreamReadTest):
class GzipStreamReadTest(GzipTest, GzipReadTestBase, StreamReadTest):
pass

class Bz2StreamReadTest(Bz2Test, StreamReadTest):
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fix :mod:`tarfile` stream mode exception when process the file with the gzip extra field.
Loading