From: Serhiy Storchaka Date: Mon, 20 Jan 2014 19:57:09 +0000 (+0200) Subject: Issue #20262: Warnings are raised now when duplicate names are added in the X-Git-Tag: v2.7.8~107 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=49259359eebaead3973816731fcb98bff0673900;p=python Issue #20262: Warnings are raised now when duplicate names are added in the ZIP file or too long ZIP file comment is truncated. --- diff --git a/Lib/test/test_zipfile.py b/Lib/test/test_zipfile.py index 9e3a28b438..97a71e6439 100644 --- a/Lib/test/test_zipfile.py +++ b/Lib/test/test_zipfile.py @@ -19,7 +19,7 @@ from random import randint, random from unittest import skipUnless from test.test_support import TESTFN, TESTFN_UNICODE, TESTFN_ENCODING, \ - run_unittest, findfile, unlink + run_unittest, findfile, unlink, check_warnings try: TESTFN_UNICODE.encode(TESTFN_ENCODING) except (UnicodeError, TypeError): @@ -148,7 +148,9 @@ class TestsWithSourceFile(unittest.TestCase): # Create the ZIP archive with zipfile.ZipFile(TESTFN2, "w", zipfile.ZIP_STORED) as zipfp: zipfp.writestr("name", "foo") - zipfp.writestr("name", "bar") + with check_warnings(('', UserWarning)): + zipfp.writestr("name", "bar") + self.assertEqual(zipfp.namelist(), ["name"] * 2) with zipfile.ZipFile(TESTFN2, "r") as zipfp: infos = zipfp.infolist() @@ -1035,7 +1037,8 @@ class OtherTests(unittest.TestCase): # check a comment that is too long is truncated with zipfile.ZipFile(TESTFN, mode="w") as zipf: - zipf.comment = comment2 + 'oops' + with check_warnings(('', UserWarning)): + zipf.comment = comment2 + 'oops' zipf.writestr("foo.txt", "O, for a Muse of Fire!") with zipfile.ZipFile(TESTFN, mode="r") as zipf: self.assertEqual(zipf.comment, comment2) diff --git a/Lib/zipfile.py b/Lib/zipfile.py index 82d240f466..46328f5323 100644 --- a/Lib/zipfile.py +++ b/Lib/zipfile.py @@ -922,10 +922,10 @@ class ZipFile(object): @comment.setter def comment(self, comment): # check for valid comment length - if len(comment) >= ZIP_MAX_COMMENT: - if self.debug: - print('Archive comment is too long; truncating to %d bytes' - % ZIP_MAX_COMMENT) + if len(comment) > ZIP_MAX_COMMENT: + import warnings + warnings.warn('Archive comment is too long; truncating to %d bytes' + % ZIP_MAX_COMMENT, stacklevel=2) comment = comment[:ZIP_MAX_COMMENT] self._comment = comment self._didModify = True @@ -1088,8 +1088,8 @@ class ZipFile(object): def _writecheck(self, zinfo): """Check for errors before writing a file to the archive.""" if zinfo.filename in self.NameToInfo: - if self.debug: # Warning for duplicate names - print "Duplicate name:", zinfo.filename + import warnings + warnings.warn('Duplicate name: %r' % zinfo.filename, stacklevel=3) if self.mode not in ("w", "a"): raise RuntimeError, 'write() requires mode "w" or "a"' if not self.fp: diff --git a/Misc/NEWS b/Misc/NEWS index 40a9c5d190..26bd48543e 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -35,6 +35,9 @@ Core and Builtins 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 #20270: urllib and urlparse now support empty ports. - Issue #20243: TarFile no longer raise ReadError when opened in write mode.