summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_tempfile.py
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2014-03-25 08:08:16 (GMT)
committerVictor Stinner <victor.stinner@gmail.com>2014-03-25 08:08:16 (GMT)
commit367f5d379ca91ef55f496614945fd929d7e09b70 (patch)
tree957ea06a1e42e296da0d8576316387080d4a5491 /Lib/test/test_tempfile.py
parent74a4ebaed09970ae156e78e0ff780797ce07635d (diff)
downloadcpython-367f5d379ca91ef55f496614945fd929d7e09b70.zip
cpython-367f5d379ca91ef55f496614945fd929d7e09b70.tar.gz
cpython-367f5d379ca91ef55f496614945fd929d7e09b70.tar.bz2
Issue #21058: Fix a leak of file descriptor in tempfile.NamedTemporaryFile(),
close the file descriptor if os.fdopen() fails
Diffstat (limited to 'Lib/test/test_tempfile.py')
-rw-r--r--Lib/test/test_tempfile.py18
1 files changed, 18 insertions, 0 deletions
diff --git a/Lib/test/test_tempfile.py b/Lib/test/test_tempfile.py
index 40f70c0..465bcda 100644
--- a/Lib/test/test_tempfile.py
+++ b/Lib/test/test_tempfile.py
@@ -771,6 +771,24 @@ class test_NamedTemporaryFile(TC):
pass
self.assertRaises(ValueError, use_closed)
+ def test_no_leak_fd(self):
+ # Issue #21058: don't leak file descriptor when fdopen() fails
+ old_close = os.close
+ old_fdopen = os.fdopen
+ closed = []
+ def close(fd):
+ closed.append(fd)
+ def fdopen(*args):
+ raise ValueError()
+ os.close = close
+ os.fdopen = fdopen
+ try:
+ self.assertRaises(ValueError, tempfile.NamedTemporaryFile)
+ self.assertEqual(len(closed), 1)
+ finally:
+ os.close = old_close
+ os.fdopen = old_fdopen
+
# How to test the mode and bufsize parameters?
test_classes.append(test_NamedTemporaryFile)