Kaydet (Commit) 25f58f6b authored tarafından Georg Brandl's avatar Georg Brandl

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

 (backport from rev. 52938)
üst 19d12d4c
......@@ -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")
......
......@@ -110,6 +110,8 @@ Extension Modules
Library
-------
- Patch #1610437: fix a tarfile bug with long filename headers.
- Patch #1472877: Fix Tix subwidget name resolution.
- Patch #1594554: Always close a tkSimpleDialog on ok(), even
......
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