Fix bug #1543303, tarfile adds padding that breaks gunzip.

Patch # 1543897.

Will backport to 2.5
This commit is contained in:
Neal Norwitz 2006-08-21 17:59:46 +00:00
parent 271d59343b
commit 8a519392d5
2 changed files with 21 additions and 3 deletions

View File

@ -411,9 +411,6 @@ class _Stream:
self.buf += self.cmp.flush() self.buf += self.cmp.flush()
if self.mode == "w" and self.buf: if self.mode == "w" and self.buf:
blocks, remainder = divmod(len(self.buf), self.bufsize)
if remainder > 0:
self.buf += NUL * (self.bufsize - remainder)
self.fileobj.write(self.buf) self.fileobj.write(self.buf)
self.buf = "" self.buf = ""
if self.comptype == "gz": if self.comptype == "gz":

View File

@ -324,6 +324,27 @@ class WriteSize0Test(BaseTest):
class WriteStreamTest(WriteTest): class WriteStreamTest(WriteTest):
sep = '|' sep = '|'
def test_padding(self):
self.dst.close()
if self.comp == "gz":
f = gzip.GzipFile(self.dstname)
s = f.read()
f.close()
elif self.comp == "bz2":
f = bz2.BZ2Decompressor()
s = file(self.dstname).read()
s = f.decompress(s)
self.assertEqual(len(f.unused_data), 0, "trailing data")
else:
f = file(self.dstname)
s = f.read()
f.close()
self.assertEqual(s.count("\0"), tarfile.RECORDSIZE,
"incorrect zero padding")
class WriteGNULongTest(unittest.TestCase): class WriteGNULongTest(unittest.TestCase):
"""This testcase checks for correct creation of GNU Longname """This testcase checks for correct creation of GNU Longname
and Longlink extensions. and Longlink extensions.