added explicit closing file opened in `Image.open`

This commit is contained in:
Atsushi Odagiri 2015-03-20 15:01:21 +09:00
parent d0e720929a
commit 8c75b955c1

View File

@ -2239,15 +2239,21 @@ def open(fp, mode="r"):
opened and identified. opened and identified.
""" """
should_close = False
if mode != "r": if mode != "r":
raise ValueError("bad mode %r" % mode) raise ValueError("bad mode %r" % mode)
if isPath(fp): if isPath(fp):
filename = fp filename = fp
fp = builtins.open(fp, "rb") fp = builtins.open(fp, "rb")
should_close = True
else: else:
filename = "" filename = ""
def finalize():
if should_close:
fp.close()
prefix = fp.read(16) prefix = fp.read(16)
preinit() preinit()
@ -2259,6 +2265,7 @@ def open(fp, mode="r"):
fp.seek(0) fp.seek(0)
im = factory(fp, filename) im = factory(fp, filename)
_decompression_bomb_check(im.size) _decompression_bomb_check(im.size)
finalize()
return im return im
except (SyntaxError, IndexError, TypeError): except (SyntaxError, IndexError, TypeError):
# import traceback # import traceback
@ -2274,12 +2281,14 @@ def open(fp, mode="r"):
fp.seek(0) fp.seek(0)
im = factory(fp, filename) im = factory(fp, filename)
_decompression_bomb_check(im.size) _decompression_bomb_check(im.size)
finalize()
return im return im
except (SyntaxError, IndexError, TypeError): except (SyntaxError, IndexError, TypeError):
# import traceback # import traceback
# traceback.print_exc() # traceback.print_exc()
pass pass
finalize()
raise IOError("cannot identify image file %r" raise IOError("cannot identify image file %r"
% (filename if filename else fp)) % (filename if filename else fp))