Testcase for patch #1484695.
This commit is contained in:
parent
94547f7646
commit
ded1c4df0b
|
@ -145,7 +145,10 @@ def nti(s):
|
|||
# There are two possible encodings for a number field, see
|
||||
# itn() below.
|
||||
if s[0] != chr(0200):
|
||||
n = int(s.rstrip(NUL + " ") or "0", 8)
|
||||
try:
|
||||
n = int(s.rstrip(NUL + " ") or "0", 8)
|
||||
except ValueError:
|
||||
raise HeaderError("invalid header")
|
||||
else:
|
||||
n = 0L
|
||||
for i in xrange(len(s) - 1):
|
||||
|
@ -826,11 +829,7 @@ class TarInfo(object):
|
|||
if buf.count(NUL) == BLOCKSIZE:
|
||||
raise HeaderError("empty header")
|
||||
|
||||
try:
|
||||
chksum = nti(buf[148:156])
|
||||
except ValueError:
|
||||
raise HeaderError("invalid header")
|
||||
|
||||
chksum = nti(buf[148:156])
|
||||
if chksum not in calc_chksums(buf):
|
||||
raise HeaderError("bad checksum")
|
||||
|
||||
|
|
|
@ -601,6 +601,28 @@ class FileModeTest(unittest.TestCase):
|
|||
self.assertEqual(tarfile.filemode(0755), '-rwxr-xr-x')
|
||||
self.assertEqual(tarfile.filemode(07111), '---s--s--t')
|
||||
|
||||
class HeaderErrorTest(unittest.TestCase):
|
||||
|
||||
def test_truncated_header(self):
|
||||
self.assertRaises(tarfile.HeaderError, tarfile.TarInfo.frombuf, "")
|
||||
self.assertRaises(tarfile.HeaderError, tarfile.TarInfo.frombuf, "filename\0")
|
||||
self.assertRaises(tarfile.HeaderError, tarfile.TarInfo.frombuf, "\0" * 511)
|
||||
self.assertRaises(tarfile.HeaderError, tarfile.TarInfo.frombuf, "\0" * 513)
|
||||
|
||||
def test_empty_header(self):
|
||||
self.assertRaises(tarfile.HeaderError, tarfile.TarInfo.frombuf, "\0" * 512)
|
||||
|
||||
def test_invalid_header(self):
|
||||
buf = tarfile.TarInfo("filename").tobuf()
|
||||
buf = buf[:148] + "foo\0\0\0\0\0" + buf[156:] # invalid number field.
|
||||
self.assertRaises(tarfile.HeaderError, tarfile.TarInfo.frombuf, buf)
|
||||
|
||||
def test_bad_checksum(self):
|
||||
buf = tarfile.TarInfo("filename").tobuf()
|
||||
b = buf[:148] + " " + buf[156:] # clear the checksum field.
|
||||
self.assertRaises(tarfile.HeaderError, tarfile.TarInfo.frombuf, b)
|
||||
b = "a" + buf[1:] # manipulate the buffer, so checksum won't match.
|
||||
self.assertRaises(tarfile.HeaderError, tarfile.TarInfo.frombuf, b)
|
||||
|
||||
if bz2:
|
||||
# Bzip2 TestCases
|
||||
|
@ -646,6 +668,7 @@ def test_main():
|
|||
|
||||
tests = [
|
||||
FileModeTest,
|
||||
HeaderErrorTest,
|
||||
ReadTest,
|
||||
ReadStreamTest,
|
||||
ReadDetectTest,
|
||||
|
|
Loading…
Reference in New Issue