From 7d3bc0ade62ed38b26be03f408ad99f8fe290b5b Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Wed, 7 Nov 2007 17:26:16 +0000 Subject: [PATCH] Patch for bug http://bugs.python.org/issue1293 The patch doesn't do the whole name mangling mambo jambo on purpose. MS sure does some weird things and I don't feel like reimplementing ntpath.normpath in C. If the user does deliberately something stupid he is on his own. TODO: Backport to 2.6 (maybe 2.5?) and document that users should only do sys.path.append(os.path.normpath(somepath)) if they want to be on the safe side. --- Python/import.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/Python/import.c b/Python/import.c index 289a1fbe05..d2922e98d9 100644 --- a/Python/import.c +++ b/Python/import.c @@ -2922,6 +2922,7 @@ static int NullImporter_init(NullImporter *self, PyObject *args, PyObject *kwds) { char *path; + Py_ssize_t pathlen; if (!_PyArg_NoKeywords("NullImporter()", kwds)) return -1; @@ -2930,14 +2931,31 @@ NullImporter_init(NullImporter *self, PyObject *args, PyObject *kwds) &path)) return -1; - if (strlen(path) == 0) { + pathlen = strlen(path); + if (pathlen == 0) { PyErr_SetString(PyExc_ImportError, "empty pathname"); return -1; } else { struct stat statbuf; int rv; +#ifdef MS_WINDOWS + /* MS Windows' stat chokes on paths like C:\\path\\. Try to + * recover *one* time by stripping of a trailing slash or + * back slash. http://bugs.python.org/issue1293 + */ rv = stat(path, &statbuf); + if (rv != 0 && pathlen <= MAXPATHLEN && + (path[pathlen-1] == '/' || path[pathlen-1] == '\\')) { + char mangled[MAXPATHLEN+1]; + + strcpy(mangled, path); + mangled[pathlen-1] = '\0'; + rv = stat(mangled, &statbuf); + } +#else + rv = stat(path, &statbuf); +#endif if (rv == 0) { /* it exists */ if (S_ISDIR(statbuf.st_mode)) { -- 2.49.0