summaryrefslogtreecommitdiffstats
path: root/Modules/_fileio.c
diff options
context:
space:
mode:
authorKristján Valur Jónsson <kristjan@ccpgames.com>2009-03-24 13:21:53 (GMT)
committerKristján Valur Jónsson <kristjan@ccpgames.com>2009-03-24 13:21:53 (GMT)
commitdc7c128d74876bf0bcef61e34bd858a675b7a43c (patch)
tree7a7e8be141f0b5557a5abc1dccd648abd1f4d4d8 /Modules/_fileio.c
parent7c43524d3cf2d141ab0bce0c1dd21bc410586cb4 (diff)
downloadcpython-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.c14
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;