bpo-29110: Fix file object leak in aifc.open when given invalid AIFF file. (GH-162)

This commit is contained in:
Anthony Zhang 2017-02-22 02:23:30 -05:00 committed by INADA Naoki
parent 0899b98095
commit 03f68b60e1
3 changed files with 33 additions and 13 deletions

View file

@ -344,9 +344,15 @@ class Aifc_read:
def __init__(self, f):
if isinstance(f, str):
f = builtins.open(f, 'rb')
# else, assume it is an open file object already
self.initfp(f)
file_object = builtins.open(f, 'rb')
try:
self.initfp(file_object)
except:
file_object.close()
raise
else:
# assume it is an open file object already
self.initfp(f)
def __enter__(self):
return self
@ -543,16 +549,19 @@ class Aifc_write:
def __init__(self, f):
if isinstance(f, str):
filename = f
f = builtins.open(f, 'wb')
file_object = builtins.open(f, 'wb')
try:
self.initfp(file_object)
except:
file_object.close()
raise
# treat .aiff file extensions as non-compressed audio
if f.endswith('.aiff'):
self._aifc = 0
else:
# else, assume it is an open file object already
filename = '???'
self.initfp(f)
if filename[-5:] == '.aiff':
self._aifc = 0
else:
self._aifc = 1
# assume it is an open file object already
self.initfp(f)
def initfp(self, file):
self._file = file