diff options
author | Kristján Valur Jónsson <kristjan@ccpgames.com> | 2009-03-24 13:21:53 (GMT) |
---|---|---|
committer | Kristján Valur Jónsson <kristjan@ccpgames.com> | 2009-03-24 13:21:53 (GMT) |
commit | dc7c128d74876bf0bcef61e34bd858a675b7a43c (patch) | |
tree | 7a7e8be141f0b5557a5abc1dccd648abd1f4d4d8 /Modules/_fileio.c | |
parent | 7c43524d3cf2d141ab0bce0c1dd21bc410586cb4 (diff) | |
download | cpython-dc7c128d74876bf0bcef61e34bd858a675b7a43c.zip cpython-dc7c128d74876bf0bcef61e34bd858a675b7a43c.tar.gz cpython-dc7c128d74876bf0bcef61e34bd858a675b7a43c.tar.bz2 |
http://bugs.python.org/issue5544
Someone may have closed the file descriptor, with something like
f = open('test.test', 'w')
os.close(f.fileno())
f.close()
Protect against this by checking fd on windows before closing.
Diffstat (limited to 'Modules/_fileio.c')
-rw-r--r-- | Modules/_fileio.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/Modules/_fileio.c b/Modules/_fileio.c index 88ee54c..0006561 100644 --- a/Modules/_fileio.c +++ b/Modules/_fileio.c @@ -77,11 +77,15 @@ internal_close(PyFileIOObject *self) if (self->fd >= 0) { int fd = self->fd; self->fd = -1; - Py_BEGIN_ALLOW_THREADS - err = close(fd); - if (err < 0) - save_errno = errno; - Py_END_ALLOW_THREADS + /* fd is accessible and someone else may have closed it */ + if (_PyVerify_fd(fd)) { + Py_BEGIN_ALLOW_THREADS + err = close(fd); + if (err < 0) + save_errno = errno; + Py_END_ALLOW_THREADS + } else + save_errno = errno; } if (err < 0) { errno = save_errno; |