diff options
author | Benjamin Peterson <benjamin@python.org> | 2008-09-01 14:13:43 (GMT) |
---|---|---|
committer | Benjamin Peterson <benjamin@python.org> | 2008-09-01 14:13:43 (GMT) |
commit | f22c26ecf4c28e16d262cdb1305411286fb925c9 (patch) | |
tree | 2f02372674b38da2f4915e5a3e5a86b580bb3172 | |
parent | f07e5a9e4b5418829e0b2e907ae5e9b7bb8f90c8 (diff) | |
download | cpython-f22c26ecf4c28e16d262cdb1305411286fb925c9.zip cpython-f22c26ecf4c28e16d262cdb1305411286fb925c9.tar.gz cpython-f22c26ecf4c28e16d262cdb1305411286fb925c9.tar.bz2 |
#3703 unhelpful _fileio.FileIO error message when trying to open a directory
Reviewer: Gregory P. Smith
-rw-r--r-- | Lib/test/test_fileio.py | 11 | ||||
-rw-r--r-- | Misc/NEWS | 3 | ||||
-rw-r--r-- | Modules/_fileio.c | 4 |
3 files changed, 17 insertions, 1 deletions
diff --git a/Lib/test/test_fileio.py b/Lib/test/test_fileio.py index a8b15fa..5a0e1a6 100644 --- a/Lib/test/test_fileio.py +++ b/Lib/test/test_fileio.py @@ -101,6 +101,17 @@ class AutoFileTests(unittest.TestCase): # should raise on closed file self.assertRaises(ValueError, method) + def testOpendir(self): + # Issue 3703: opening a directory should fill the errno + # Windows always returns "[Errno 13]: Permission denied + # Unix calls dircheck() and returns "[Errno 21]: Is a directory" + try: + _fileio._FileIO('.', 'r') + except IOError as e: + self.assertNotEqual(e.errno, 0) + else: + self.fail("Should have raised IOError") + class OtherFileTests(unittest.TestCase): @@ -52,6 +52,9 @@ Library - Fixed two format strings in the _collections module. +- #3703 _fileio.FileIO gave unhelpful error message when trying to open a + directory. + Extension Modules ----------------- diff --git a/Modules/_fileio.c b/Modules/_fileio.c index d6f004f..c3d61b4 100644 --- a/Modules/_fileio.c +++ b/Modules/_fileio.c @@ -262,7 +262,7 @@ fileio_init(PyObject *oself, PyObject *args, PyObject *kwds) #endif self->fd = open(name, flags, 0666); Py_END_ALLOW_THREADS - if (self->fd < 0 || dircheck(self) < 0) { + if (self->fd < 0) { #ifdef MS_WINDOWS PyErr_SetFromErrnoWithUnicodeFilename(PyExc_IOError, widename); #else @@ -270,6 +270,8 @@ fileio_init(PyObject *oself, PyObject *args, PyObject *kwds) #endif goto error; } + if(dircheck(self) < 0) + goto error; } goto done; |