From e08e3d06864c5ad993f74613d9ed4ce69cc6cbc6 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Sun, 25 May 2008 08:07:37 +0000 Subject: [PATCH] #2959: allow multiple close() calls for GzipFile. --- Lib/gzip.py | 2 ++ Lib/test/test_gzip.py | 9 ++++++--- Misc/NEWS | 4 ++++ 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/Lib/gzip.py b/Lib/gzip.py index eeef3f8b90..7a3f813de6 100644 --- a/Lib/gzip.py +++ b/Lib/gzip.py @@ -306,6 +306,8 @@ class GzipFile: raise IOError, "Incorrect length of data produced" def close(self): + if self.fileobj is None: + return if self.mode == WRITE: self.fileobj.write(self.compress.flush()) write32u(self.fileobj, self.crc) diff --git a/Lib/test/test_gzip.py b/Lib/test/test_gzip.py index a1a267e991..105882abbc 100644 --- a/Lib/test/test_gzip.py +++ b/Lib/test/test_gzip.py @@ -24,14 +24,14 @@ data2 = """/* zlibmodule.c -- gzip-compatible data compression */ class TestGzip(unittest.TestCase): filename = test_support.TESTFN - def setUp (self): + def setUp(self): test_support.unlink(self.filename) - def tearDown (self): + def tearDown(self): test_support.unlink(self.filename) - def test_write (self): + def test_write(self): f = gzip.GzipFile(self.filename, 'wb') ; f.write(data1 * 50) # Try flush and fileno. @@ -41,6 +41,9 @@ class TestGzip(unittest.TestCase): os.fsync(f.fileno()) f.close() + # Test multiple close() calls. + f.close() + def test_read(self): self.test_write() # Try reading. diff --git a/Misc/NEWS b/Misc/NEWS index 6b4016472f..732cfa7942 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -59,6 +59,10 @@ Extension Modules Library ------- +- Issue #2959: For consistency with other file-like objects, gzip's + GzipFile.close() can now be called multiple times without raising + an exception. + - Issue #1390: Raise ValueError in toxml when an invalid comment would otherwise be produced. -- 2.50.0