mirror of
https://github.com/python/cpython.git
synced 2025-09-30 12:21:51 +00:00
multiple times. Writing to closed zip entry writer object now always produce
a ValueError.
(cherry picked from commit 4c0d9ea995
)
This commit is contained in:
parent
d5fa5f3ce7
commit
8e5b52a8da
3 changed files with 49 additions and 0 deletions
|
@ -734,6 +734,48 @@ class LzmaTestZip64InSmallFiles(AbstractTestZip64InSmallFiles,
|
||||||
compression = zipfile.ZIP_LZMA
|
compression = zipfile.ZIP_LZMA
|
||||||
|
|
||||||
|
|
||||||
|
class AbstractWriterTests:
|
||||||
|
|
||||||
|
def tearDown(self):
|
||||||
|
unlink(TESTFN2)
|
||||||
|
|
||||||
|
def test_close_after_close(self):
|
||||||
|
data = b'content'
|
||||||
|
with zipfile.ZipFile(TESTFN2, "w", self.compression) as zipf:
|
||||||
|
w = zipf.open('test', 'w')
|
||||||
|
w.write(data)
|
||||||
|
w.close()
|
||||||
|
self.assertTrue(w.closed)
|
||||||
|
w.close()
|
||||||
|
self.assertTrue(w.closed)
|
||||||
|
self.assertEqual(zipf.read('test'), data)
|
||||||
|
|
||||||
|
def test_write_after_close(self):
|
||||||
|
data = b'content'
|
||||||
|
with zipfile.ZipFile(TESTFN2, "w", self.compression) as zipf:
|
||||||
|
w = zipf.open('test', 'w')
|
||||||
|
w.write(data)
|
||||||
|
w.close()
|
||||||
|
self.assertTrue(w.closed)
|
||||||
|
self.assertRaises(ValueError, w.write, b'')
|
||||||
|
self.assertEqual(zipf.read('test'), data)
|
||||||
|
|
||||||
|
class StoredWriterTests(AbstractWriterTests, unittest.TestCase):
|
||||||
|
compression = zipfile.ZIP_STORED
|
||||||
|
|
||||||
|
@requires_zlib
|
||||||
|
class DeflateWriterTests(AbstractWriterTests, unittest.TestCase):
|
||||||
|
compression = zipfile.ZIP_DEFLATED
|
||||||
|
|
||||||
|
@requires_bz2
|
||||||
|
class Bzip2WriterTests(AbstractWriterTests, unittest.TestCase):
|
||||||
|
compression = zipfile.ZIP_BZIP2
|
||||||
|
|
||||||
|
@requires_lzma
|
||||||
|
class LzmaWriterTests(AbstractWriterTests, unittest.TestCase):
|
||||||
|
compression = zipfile.ZIP_LZMA
|
||||||
|
|
||||||
|
|
||||||
class PyZipFileTests(unittest.TestCase):
|
class PyZipFileTests(unittest.TestCase):
|
||||||
def assertCompiledIn(self, name, namelist):
|
def assertCompiledIn(self, name, namelist):
|
||||||
if name + 'o' not in namelist:
|
if name + 'o' not in namelist:
|
||||||
|
|
|
@ -981,6 +981,8 @@ class _ZipWriteFile(io.BufferedIOBase):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def write(self, data):
|
def write(self, data):
|
||||||
|
if self.closed:
|
||||||
|
raise ValueError('I/O operation on closed file.')
|
||||||
nbytes = len(data)
|
nbytes = len(data)
|
||||||
self._file_size += nbytes
|
self._file_size += nbytes
|
||||||
self._crc = crc32(data, self._crc)
|
self._crc = crc32(data, self._crc)
|
||||||
|
@ -991,6 +993,8 @@ class _ZipWriteFile(io.BufferedIOBase):
|
||||||
return nbytes
|
return nbytes
|
||||||
|
|
||||||
def close(self):
|
def close(self):
|
||||||
|
if self.closed:
|
||||||
|
return
|
||||||
super().close()
|
super().close()
|
||||||
# Flush any data from the compressor, and update header info
|
# Flush any data from the compressor, and update header info
|
||||||
if self._compressor:
|
if self._compressor:
|
||||||
|
|
|
@ -32,6 +32,9 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- bpo-30017: Allowed calling the close() method of the zip entry writer object
|
||||||
|
multiple times. Writing to a closed writer now always produces a ValueError.
|
||||||
|
|
||||||
- bpo-30068: _io._IOBase.readlines will check if it's closed first when
|
- bpo-30068: _io._IOBase.readlines will check if it's closed first when
|
||||||
hint is present.
|
hint is present.
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue