diff options
-rw-r--r-- | Lib/test/test_zipfile.py | 21 | ||||
-rw-r--r-- | Lib/zipfile.py | 2 | ||||
-rw-r--r-- | Misc/NEWS | 4 |
3 files changed, 26 insertions, 1 deletions
diff --git a/Lib/test/test_zipfile.py b/Lib/test/test_zipfile.py index 57f9a89..d21a9eb 100644 --- a/Lib/test/test_zipfile.py +++ b/Lib/test/test_zipfile.py @@ -76,3 +76,24 @@ except IOError: else: raise TestFailed("expected creation of readable ZipFile without\n" " a file to raise an IOError.") + + +# Verify that testzip() doesn't swallow inappropriate exceptions. +data = StringIO.StringIO() +zipf = zipfile.ZipFile(data, mode="w") +zipf.writestr("foo.txt", "O, for a Muse of Fire!") +zipf.close() +zipf = zipfile.ZipFile(data, mode="r") +zipf.close() +try: + zipf.testzip() +except RuntimeError: + # This is correct; calling .read on a closed ZipFile should throw + # a RuntimeError, and so should calling .testzip. An earlier + # version of .testzip would swallow this exception (and any other) + # and report that the first file in the archive was corrupt. + pass +else: + raise TestFailed("expected calling .testzip on a closed ZipFile" + " to raise a RuntimeError") +del data, zipf diff --git a/Lib/zipfile.py b/Lib/zipfile.py index 207fc34..b1943c1 100644 --- a/Lib/zipfile.py +++ b/Lib/zipfile.py @@ -327,7 +327,7 @@ class ZipFile: for zinfo in self.filelist: try: self.read(zinfo.filename) # Check CRC-32 - except: + except BadZipfile: return zinfo.filename def getinfo(self, name): @@ -83,6 +83,10 @@ Extension modules Library ------- +- ZipFile.testzip() now only traps BadZipfile exceptions. Previously, + a bare except caught to much and reported all errors as a problem + in the archive. + - The logging module now has a new function, makeLogRecord() making LogHandler easier to interact with DatagramHandler and SocketHandler. |