mirror of https://github.com/python/cpython
Merge #10694: zipfile now ignores garbage at the end of a zipfile.
This commit is contained in:
commit
51fcb811e3
|
@ -345,6 +345,24 @@ class TestsWithSourceFile(unittest.TestCase):
|
||||||
with zipfile.ZipFile(f, "r") as zipfp:
|
with zipfile.ZipFile(f, "r") as zipfp:
|
||||||
self.assertEqual(zipfp.namelist(), [TESTFN])
|
self.assertEqual(zipfp.namelist(), [TESTFN])
|
||||||
|
|
||||||
|
def test_ignores_newline_at_end(self):
|
||||||
|
with zipfile.ZipFile(TESTFN2, "w", zipfile.ZIP_STORED) as zipfp:
|
||||||
|
zipfp.write(TESTFN, TESTFN)
|
||||||
|
with open(TESTFN2, 'a') as f:
|
||||||
|
f.write("\r\n\00\00\00")
|
||||||
|
with zipfile.ZipFile(TESTFN2, "r") as zipfp:
|
||||||
|
self.assertIsInstance(zipfp, zipfile.ZipFile)
|
||||||
|
|
||||||
|
def test_ignores_stuff_appended_past_comments(self):
|
||||||
|
with zipfile.ZipFile(TESTFN2, "w", zipfile.ZIP_STORED) as zipfp:
|
||||||
|
zipfp.comment = b"this is a comment"
|
||||||
|
zipfp.write(TESTFN, TESTFN)
|
||||||
|
with open(TESTFN2, 'a') as f:
|
||||||
|
f.write("abcdef\r\n")
|
||||||
|
with zipfile.ZipFile(TESTFN2, "r") as zipfp:
|
||||||
|
self.assertIsInstance(zipfp, zipfile.ZipFile)
|
||||||
|
self.assertEqual(zipfp.comment, b"this is a comment")
|
||||||
|
|
||||||
def test_write_default_name(self):
|
def test_write_default_name(self):
|
||||||
"""Check that calling ZipFile.write without arcname specified
|
"""Check that calling ZipFile.write without arcname specified
|
||||||
produces the expected result."""
|
produces the expected result."""
|
||||||
|
|
|
@ -246,16 +246,14 @@ def _EndRecData(fpin):
|
||||||
# found the magic number; attempt to unpack and interpret
|
# found the magic number; attempt to unpack and interpret
|
||||||
recData = data[start:start+sizeEndCentDir]
|
recData = data[start:start+sizeEndCentDir]
|
||||||
endrec = list(struct.unpack(structEndArchive, recData))
|
endrec = list(struct.unpack(structEndArchive, recData))
|
||||||
comment = data[start+sizeEndCentDir:]
|
commentSize = endrec[_ECD_COMMENT_SIZE] #as claimed by the zip file
|
||||||
# check that comment length is correct
|
comment = data[start+sizeEndCentDir:start+sizeEndCentDir+commentSize]
|
||||||
if endrec[_ECD_COMMENT_SIZE] == len(comment):
|
endrec.append(comment)
|
||||||
# Append the archive comment and start offset
|
endrec.append(maxCommentStart + start)
|
||||||
endrec.append(comment)
|
|
||||||
endrec.append(maxCommentStart + start)
|
|
||||||
|
|
||||||
# Try to read the "Zip64 end of central directory" structure
|
# Try to read the "Zip64 end of central directory" structure
|
||||||
return _EndRecData64(fpin, maxCommentStart + start - filesize,
|
return _EndRecData64(fpin, maxCommentStart + start - filesize,
|
||||||
endrec)
|
endrec)
|
||||||
|
|
||||||
# Unable to find a valid end of central directory structure
|
# Unable to find a valid end of central directory structure
|
||||||
return
|
return
|
||||||
|
|
|
@ -187,6 +187,8 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #10694: zipfile now ignores garbage at the end of a zipfile.
|
||||||
|
|
||||||
- Issue #12283: Fixed regression in smtplib quoting of leading dots in DATA.
|
- Issue #12283: Fixed regression in smtplib quoting of leading dots in DATA.
|
||||||
|
|
||||||
- Issue #10424: Argparse now includes the names of the missing required
|
- Issue #10424: Argparse now includes the names of the missing required
|
||||||
|
|
Loading…
Reference in New Issue