mirror of
				https://github.com/python/cpython.git
				synced 2025-10-30 21:21:22 +00:00 
			
		
		
		
	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.
This commit is contained in:
		
							parent
							
								
									ef181a7619
								
							
						
					
					
						commit
						7d3bc0ade6
					
				
					 1 changed files with 19 additions and 1 deletions
				
			
		|  | @ -2922,6 +2922,7 @@ static int | ||||||
| NullImporter_init(NullImporter *self, PyObject *args, PyObject *kwds) | NullImporter_init(NullImporter *self, PyObject *args, PyObject *kwds) | ||||||
| { | { | ||||||
| 	char *path; | 	char *path; | ||||||
|  | 	Py_ssize_t pathlen; | ||||||
| 
 | 
 | ||||||
| 	if (!_PyArg_NoKeywords("NullImporter()", kwds)) | 	if (!_PyArg_NoKeywords("NullImporter()", kwds)) | ||||||
| 		return -1; | 		return -1; | ||||||
|  | @ -2930,14 +2931,31 @@ NullImporter_init(NullImporter *self, PyObject *args, PyObject *kwds) | ||||||
| 			      &path)) | 			      &path)) | ||||||
| 		return -1; | 		return -1; | ||||||
| 
 | 
 | ||||||
| 	if (strlen(path) == 0) { | 	pathlen = strlen(path); | ||||||
|  | 	if (pathlen == 0) { | ||||||
| 		PyErr_SetString(PyExc_ImportError, "empty pathname"); | 		PyErr_SetString(PyExc_ImportError, "empty pathname"); | ||||||
| 		return -1; | 		return -1; | ||||||
| 	} else { | 	} else { | ||||||
| 		struct stat statbuf; | 		struct stat statbuf; | ||||||
| 		int rv; | 		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); | 		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) { | 		if (rv == 0) { | ||||||
| 			/* it exists */ | 			/* it exists */ | ||||||
| 			if (S_ISDIR(statbuf.st_mode)) { | 			if (S_ISDIR(statbuf.st_mode)) { | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Christian Heimes
						Christian Heimes