Index: Python/import.c =================================================================== --- Python/import.c (Revision 58750) +++ Python/import.c (Arbeitskopie) @@ -2978,23 +2978,45 @@ NullImporter_init(NullImporter *self, PyObject *args, PyObject *kwds) { char *path; + Py_ssize_t pathlen; if (!_PyArg_NoKeywords("NullImporter()", kwds)) return -1; - if (!PyArg_ParseTuple(args, "s:NullImporter", - &path)) + if (!PyArg_ParseTuple(args, "s#:NullImporter", + &path, &pathlen)) return -1; - if (strlen(path) == 0) { + if (pathlen == 0) { PyErr_SetString(PyExc_ImportError, "empty pathname"); return -1; } else { #ifndef RISCOS struct stat statbuf; int rv; + char mangled[MAXPATHLEN+1]; + Py_ssize_t i; - rv = stat(path, &statbuf); + if (pathlen > MAXPATHLEN) { + PyErr_SetString(PyExc_OverflowError, + "path is too long"); + return -1; + } + strcpy(mangled, path); + + /* Remove trailing / and \. Windows' stat doesn't like them */ + for (i = pathlen-1; i > 0; i--) { +#ifdef MS_WINDOWS + if (mangled[i] != '/' && mangled[i] != '\\') { +#else + if (mangled[i] != '/') { +#endif + break; + } + mangled[i] = '\0'; + } + + rv = stat(mangled, &statbuf); if (rv == 0) { /* it exists */ if (S_ISDIR(statbuf.st_mode)) {