mirror of https://github.com/python/cpython.git
Issue #16485: Fix file descriptor not being closed if file header patching fails on closing of aifc file.
This commit is contained in:
parent
40f12ab0c5
commit
4ed797efbc
38
Lib/aifc.py
38
Lib/aifc.py
|
@ -732,22 +732,28 @@ def writeframes(self, data):
|
|||
self._patchheader()
|
||||
|
||||
def close(self):
|
||||
self._ensure_header_written(0)
|
||||
if self._datawritten & 1:
|
||||
# quick pad to even size
|
||||
self._file.write(chr(0))
|
||||
self._datawritten = self._datawritten + 1
|
||||
self._writemarkers()
|
||||
if self._nframeswritten != self._nframes or \
|
||||
self._datalength != self._datawritten or \
|
||||
self._marklength:
|
||||
self._patchheader()
|
||||
if self._comp:
|
||||
self._comp.CloseCompressor()
|
||||
self._comp = None
|
||||
# Prevent ref cycles
|
||||
self._convert = None
|
||||
self._file.close()
|
||||
if self._file is None:
|
||||
return
|
||||
try:
|
||||
self._ensure_header_written(0)
|
||||
if self._datawritten & 1:
|
||||
# quick pad to even size
|
||||
self._file.write(chr(0))
|
||||
self._datawritten = self._datawritten + 1
|
||||
self._writemarkers()
|
||||
if self._nframeswritten != self._nframes or \
|
||||
self._datalength != self._datawritten or \
|
||||
self._marklength:
|
||||
self._patchheader()
|
||||
if self._comp:
|
||||
self._comp.CloseCompressor()
|
||||
self._comp = None
|
||||
finally:
|
||||
# Prevent ref cycles
|
||||
self._convert = None
|
||||
f = self._file
|
||||
self._file = None
|
||||
f.close()
|
||||
|
||||
#
|
||||
# Internal methods.
|
||||
|
|
|
@ -106,6 +106,13 @@ def __getattr__(self, attr): return getattr(self.file, attr)
|
|||
self.assertEqual(testfile.closed, False)
|
||||
f.close()
|
||||
self.assertEqual(testfile.closed, True)
|
||||
testfile = open(TESTFN, 'wb')
|
||||
fout = aifc.open(testfile, 'wb')
|
||||
self.assertFalse(testfile.closed)
|
||||
with self.assertRaises(aifc.Error):
|
||||
fout.close()
|
||||
self.assertTrue(testfile.closed)
|
||||
fout.close() # do nothing
|
||||
|
||||
|
||||
class AIFCLowLevelTest(unittest.TestCase):
|
||||
|
|
|
@ -175,6 +175,9 @@ Core and Builtins
|
|||
Library
|
||||
-------
|
||||
|
||||
- Issue #16485: Fix file descriptor not being closed if file header patching
|
||||
fails on closing of aifc file.
|
||||
|
||||
- Issue #12065: connect_ex() on an SSL socket now returns the original errno
|
||||
when the socket's timeout expires (it used to return None).
|
||||
|
||||
|
|
Loading…
Reference in New Issue