Commit 5cd065c8 authored by Georg Brandl's avatar Georg Brandl

Patch #1610437: fix a tarfile bug with long filename headers.

parent b97fa2e6
......@@ -857,7 +857,11 @@ class TarInfo(object):
if self.name.endswith("/"):
type = DIRTYPE
name = normpath(self.name)
if type in (GNUTYPE_LONGNAME, GNUTYPE_LONGLINK):
# Prevent "././@LongLink" from being normalized.
name = self.name
else:
name = normpath(self.name)
if type == DIRTYPE:
# directories should end with '/'
......@@ -913,7 +917,7 @@ class TarInfo(object):
]
buf += struct.pack("%ds" % BLOCKSIZE, "".join(parts))
chksum = calc_chksums(buf)[0]
chksum = calc_chksums(buf[-BLOCKSIZE:])[0]
buf = buf[:-364] + "%06o\0" % chksum + buf[-357:]
self.buf = buf
return buf
......
......@@ -388,13 +388,6 @@ class WriteGNULongTest(unittest.TestCase):
is tested as well.
"""
def setUp(self):
self.tar = tarfile.open(tmpname(), "w")
self.tar.posix = False
def tearDown(self):
self.tar.close()
def _length(self, s):
blocks, remainder = divmod(len(s) + 1, 512)
if remainder:
......@@ -423,12 +416,23 @@ class WriteGNULongTest(unittest.TestCase):
tarinfo.linkname = link
tarinfo.type = tarfile.LNKTYPE
self.tar.addfile(tarinfo)
tar = tarfile.open(tmpname(), "w")
tar.posix = False
tar.addfile(tarinfo)
v1 = self._calc_size(name, link)
v2 = self.tar.offset
v2 = tar.offset
self.assertEqual(v1, v2, "GNU longname/longlink creation failed")
tar.close()
tar = tarfile.open(tmpname())
member = tar.next()
self.failIf(member is None, "unable to read longname member")
self.assert_(tarinfo.name == member.name and \
tarinfo.linkname == member.linkname, \
"unable to read longname member")
def test_longname_1023(self):
self._test(("longnam/" * 127) + "longnam")
......
......@@ -101,6 +101,8 @@ Core and builtins
Library
-------
- Patch #1610437: fix a tarfile bug with long filename headers.
- Patch #1371075: Make ConfigParser accept optional dict type
for ordering, sorting, etc.
......
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