Issue #20262: Warnings are raised now when duplicate names are added in the

ZIP file or too long ZIP file comment is truncated.
This commit is contained in:
Serhiy Storchaka 2014-01-20 21:57:40 +02:00
parent 7e52705ee3
commit 9b7a1a1af6
3 changed files with 14 additions and 8 deletions

View File

@ -844,7 +844,9 @@ class OtherTests(unittest.TestCase):
# Create the ZIP archive # Create the ZIP archive
with zipfile.ZipFile(TESTFN2, "w", zipfile.ZIP_STORED) as zipfp: with zipfile.ZipFile(TESTFN2, "w", zipfile.ZIP_STORED) as zipfp:
zipfp.writestr("name", "foo") zipfp.writestr("name", "foo")
zipfp.writestr("name", "bar") with self.assertWarns(UserWarning):
zipfp.writestr("name", "bar")
self.assertEqual(zipfp.namelist(), ["name"] * 2)
with zipfile.ZipFile(TESTFN2, "r") as zipfp: with zipfile.ZipFile(TESTFN2, "r") as zipfp:
infos = zipfp.infolist() infos = zipfp.infolist()
@ -1150,7 +1152,8 @@ class OtherTests(unittest.TestCase):
# check a comment that is too long is truncated # check a comment that is too long is truncated
with zipfile.ZipFile(TESTFN, mode="w") as zipf: with zipfile.ZipFile(TESTFN, mode="w") as zipf:
zipf.comment = comment2 + b'oops' with self.assertWarns(UserWarning):
zipf.comment = comment2 + b'oops'
zipf.writestr("foo.txt", "O, for a Muse of Fire!") zipf.writestr("foo.txt", "O, for a Muse of Fire!")
with zipfile.ZipFile(TESTFN, mode="r") as zipfr: with zipfile.ZipFile(TESTFN, mode="r") as zipfr:
self.assertEqual(zipfr.comment, comment2) self.assertEqual(zipfr.comment, comment2)

View File

@ -1102,10 +1102,10 @@ class ZipFile:
if not isinstance(comment, bytes): if not isinstance(comment, bytes):
raise TypeError("comment: expected bytes, got %s" % type(comment)) raise TypeError("comment: expected bytes, got %s" % type(comment))
# check for valid comment length # check for valid comment length
if len(comment) >= ZIP_MAX_COMMENT: if len(comment) > ZIP_MAX_COMMENT:
if self.debug: import warnings
print('Archive comment is too long; truncating to %d bytes' warnings.warn('Archive comment is too long; truncating to %d bytes'
% ZIP_MAX_COMMENT) % ZIP_MAX_COMMENT, stacklevel=2)
comment = comment[:ZIP_MAX_COMMENT] comment = comment[:ZIP_MAX_COMMENT]
self._comment = comment self._comment = comment
self._didModify = True self._didModify = True
@ -1290,8 +1290,8 @@ class ZipFile:
def _writecheck(self, zinfo): def _writecheck(self, zinfo):
"""Check for errors before writing a file to the archive.""" """Check for errors before writing a file to the archive."""
if zinfo.filename in self.NameToInfo: if zinfo.filename in self.NameToInfo:
if self.debug: # Warning for duplicate names import warnings
print("Duplicate name:", zinfo.filename) warnings.warn('Duplicate name: %r' % zinfo.filename, stacklevel=3)
if self.mode not in ("w", "a"): if self.mode not in ("w", "a"):
raise RuntimeError('write() requires mode "w" or "a"') raise RuntimeError('write() requires mode "w" or "a"')
if not self.fp: if not self.fp:

View File

@ -43,6 +43,9 @@ Core and Builtins
Library Library
------- -------
- Issue #20262: Warnings are raised now when duplicate names are added in the
ZIP file or too long ZIP file comment is truncated.
- Issue #18574: Added missing newline in 100-Continue reply from - Issue #18574: Added missing newline in 100-Continue reply from
http.server.BaseHTTPRequestHandler. Patch by Nikolaus Rath. http.server.BaseHTTPRequestHandler. Patch by Nikolaus Rath.