SF patch #756996: Bare except in ZipFile.testzip()

(Contributed by Steven Taschuk)

Replaces a bare except that caused all errors to be mis-reported as
archive errors.

Added a related NEWS item.
This commit is contained in:
Raymond Hettinger 2003-06-27 22:25:03 +00:00
parent 6f3eaa67e5
commit c0fac96c29
3 changed files with 26 additions and 1 deletions

View file

@ -76,3 +76,24 @@ def zipTest(f, compression, srccontents):
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

View file

@ -327,7 +327,7 @@ def testzip(self):
for zinfo in self.filelist:
try:
self.read(zinfo.filename) # Check CRC-32
except:
except BadZipfile:
return zinfo.filename
def getinfo(self, name):

View file

@ -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.