]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Patch #448227: Raise an exception when a directory is passed to execfile.
authorMartin v. Löwis <martin@v.loewis.de>
Wed, 8 Aug 2001 05:30:36 +0000 (05:30 +0000)
committerMartin v. Löwis <martin@v.loewis.de>
Wed, 8 Aug 2001 05:30:36 +0000 (05:30 +0000)
Python/bltinmodule.c

index ec3c5fc0a046650392b307e7767a20967449fccb..fa6816279dfd5d3052bf4a5d5dd629eddadbc7d1 100644 (file)
@@ -568,6 +568,8 @@ builtin_execfile(PyObject *self, PyObject *args)
        PyObject *res;
        FILE* fp;
        PyCompilerFlags cf;
+       int exists;
+       struct stat s;
 
        if (!PyArg_ParseTuple(args, "s|O!O!:execfile",
                        &filename,
@@ -586,10 +588,27 @@ builtin_execfile(PyObject *self, PyObject *args)
                                         PyEval_GetBuiltins()) != 0)
                        return NULL;
        }
-       Py_BEGIN_ALLOW_THREADS
-       fp = fopen(filename, "r");
-       Py_END_ALLOW_THREADS
-       if (fp == NULL) {
+
+       exists = 0;
+       /* Test for existence or directory. */
+       if (!stat(filename, &s)) {
+               if (S_ISDIR(s.st_mode))
+                       errno = EISDIR;
+               else
+                       exists = 1;
+       }
+
+        if (exists) {
+               Py_BEGIN_ALLOW_THREADS
+               fp = fopen(filename, "r");
+               Py_END_ALLOW_THREADS
+
+               if (fp == NULL) {
+                       exists = 0;
+               }
+        }
+
+       if (!exists) {
                PyErr_SetFromErrno(PyExc_IOError);
                return NULL;
        }