Issue #26385: Cleanup NamedTemporaryFile if fdopen() fails, by SilentGhost

This commit is contained in:
Martin Panter 2016-02-29 00:31:38 +00:00
parent 97b6e0bd1b
commit b6b1ab4fa8
3 changed files with 12 additions and 1 deletions

View File

@ -476,7 +476,8 @@ def NamedTemporaryFile(mode='w+b', bufsize=-1, suffix="",
try:
file = _os.fdopen(fd, mode, bufsize)
return _TemporaryFileWrapper(file, name, delete)
except:
except BaseException:
_os.unlink(name)
_os.close(fd)
raise

View File

@ -827,6 +827,13 @@ class test_NamedTemporaryFile(TC):
os.close = old_close
os.fdopen = old_fdopen
def test_bad_mode(self):
dir = tempfile.mkdtemp()
self.addCleanup(support.rmtree, dir)
with self.assertRaises(TypeError):
tempfile.NamedTemporaryFile(mode=(), dir=dir)
self.assertEqual(os.listdir(dir), [])
# How to test the mode and bufsize parameters?
test_classes.append(test_NamedTemporaryFile)

View File

@ -55,6 +55,9 @@ Core and Builtins
Library
-------
- Issue #26385: Remove the file if the internal fdopen() call in
NamedTemporaryFile() fails. Based on patch by Silent Ghost.
- Issue #26309: In the "socketserver" module, shut down the request (closing
the connected socket) when verify_request() returns false. Based on patch
by Aviv Palivoda.