diff options
| author | Victor Stinner <victor.stinner@gmail.com> | 2014-03-25 08:08:16 (GMT) |
|---|---|---|
| committer | Victor Stinner <victor.stinner@gmail.com> | 2014-03-25 08:08:16 (GMT) |
| commit | 367f5d379ca91ef55f496614945fd929d7e09b70 (patch) | |
| tree | 957ea06a1e42e296da0d8576316387080d4a5491 /Lib/test/test_tempfile.py | |
| parent | 74a4ebaed09970ae156e78e0ff780797ce07635d (diff) | |
| download | cpython-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.py | 18 |
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) |
