From: Martin v. Löwis Date: Wed, 8 Aug 2001 05:30:36 +0000 (+0000) Subject: Patch #448227: Raise an exception when a directory is passed to execfile. X-Git-Tag: v2.2a3~757 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6b3a2c4a48eeefce64de12060d4ba0f38a5f3033;p=thirdparty%2FPython%2Fcpython.git Patch #448227: Raise an exception when a directory is passed to execfile. --- diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c index ec3c5fc0a046..fa6816279dfd 100644 --- a/Python/bltinmodule.c +++ b/Python/bltinmodule.c @@ -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; }