mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	Issue #7732: Don't open a directory as a file anymore while importing a
module. Ignore the direcotry if its name matchs the module name (e.g. "__init__.py") and raise a ImportError instead.
This commit is contained in:
		
							parent
							
								
									da6eb5305f
								
							
						
					
					
						commit
						53ffdc53bf
					
				
					 3 changed files with 22 additions and 2 deletions
				
			
		|  | @ -139,6 +139,15 @@ def test_imp_module(self): | |||
|             self.assertIs(orig_path, new_os.path) | ||||
|             self.assertIsNot(orig_getenv, new_os.getenv) | ||||
| 
 | ||||
|     def test_bug7732(self): | ||||
|         source = TESTFN + '.py' | ||||
|         os.mkdir(source) | ||||
|         try: | ||||
|             self.assertRaisesRegex(ImportError, '^No module', | ||||
|                 imp.find_module, TESTFN, ["."]) | ||||
|         finally: | ||||
|             os.rmdir(source) | ||||
| 
 | ||||
|     def test_module_with_large_stack(self, module='longlist'): | ||||
|         # Regression test for http://bugs.python.org/issue561858. | ||||
|         filename = module + '.py' | ||||
|  |  | |||
|  | @ -10,6 +10,10 @@ What's New in Python 3.2.3? | |||
| Core and Builtins | ||||
| ----------------- | ||||
| 
 | ||||
| - Issue #7732: Don't open a directory as a file anymore while importing a | ||||
|   module. Ignore the direcotry if its name matchs the module name (e.g. | ||||
|   "__init__.py") and raise a ImportError instead. | ||||
| 
 | ||||
| - Issue #13021: Missing decref on an error path.  Thanks to Suman Saha for | ||||
|   finding the bug and providing a patch. | ||||
| 
 | ||||
|  | @ -77,7 +81,7 @@ Tests | |||
| 
 | ||||
| Extension Modules | ||||
| ----------------- | ||||
|   | ||||
| 
 | ||||
| - Issue #13022: Fix: _multiprocessing.recvfd() doesn't check that | ||||
|   file descriptor was actually received. | ||||
| 
 | ||||
|  |  | |||
|  | @ -1763,6 +1763,7 @@ find_module(char *fullname, char *subname, PyObject *path, char *buf, | |||
|         saved_namelen = namelen; | ||||
| #endif /* PYOS_OS2 */ | ||||
|         for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) { | ||||
|             struct stat statbuf; | ||||
| #if defined(PYOS_OS2) && defined(HAVE_DYNAMIC_LOADING) | ||||
|             /* OS/2 limits DLLs to 8 character names (w/o
 | ||||
|                extension) | ||||
|  | @ -1791,10 +1792,16 @@ find_module(char *fullname, char *subname, PyObject *path, char *buf, | |||
|             strcpy(buf+len, fdp->suffix); | ||||
|             if (Py_VerboseFlag > 1) | ||||
|                 PySys_WriteStderr("# trying %s\n", buf); | ||||
| 
 | ||||
|             filemode = fdp->mode; | ||||
|             if (filemode[0] == 'U') | ||||
|                 filemode = "r" PY_STDIOTEXTMODE; | ||||
|             fp = fopen(buf, filemode); | ||||
| 
 | ||||
|             if (stat(buf, &statbuf) == 0 && S_ISDIR(statbuf.st_mode)) | ||||
|                 /* it's a directory */ | ||||
|                 fp = NULL; | ||||
|             else | ||||
|                 fp = fopen(buf, filemode); | ||||
|             if (fp != NULL) { | ||||
|                 if (case_ok(buf, len, namelen, name)) | ||||
|                     break; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Victor Stinner
						Victor Stinner