diff options
author | Christian Heimes <christian@cheimes.de> | 2008-01-09 19:56:33 (GMT) |
---|---|---|
committer | Christian Heimes <christian@cheimes.de> | 2008-01-09 19:56:33 (GMT) |
commit | 3403f1589d769a5596dfc261a9cab31b307fb059 (patch) | |
tree | 9e24a9ae128fda398b29cc839f05ae45a98d12ac | |
parent | 195b883bb47a392ea8b92dccbca30ffcf1adecd3 (diff) | |
download | cpython-3403f1589d769a5596dfc261a9cab31b307fb059.zip cpython-3403f1589d769a5596dfc261a9cab31b307fb059.tar.gz cpython-3403f1589d769a5596dfc261a9cab31b307fb059.tar.bz2 |
Fixed #1776. __import__() no longer imports modules by file name
-rw-r--r-- | Lib/test/test_import.py | 12 | ||||
-rw-r--r-- | Misc/NEWS | 4 | ||||
-rw-r--r-- | Python/import.c | 10 |
3 files changed, 25 insertions, 1 deletions
diff --git a/Lib/test/test_import.py b/Lib/test/test_import.py index 9c44b87..a44170c 100644 --- a/Lib/test/test_import.py +++ b/Lib/test/test_import.py @@ -1,4 +1,4 @@ -from test.test_support import TESTFN, run_unittest, catch_warning +from test.test_support import TESTFN, run_unittest, catch_warning import unittest import os @@ -223,6 +223,16 @@ class ImportTest(unittest.TestCase): warnings.simplefilter('error', ImportWarning) self.assertRaises(ImportWarning, __import__, "site-packages") + def test_importbyfilename(self): + path = os.path.abspath(TESTFN) + try: + __import__(path) + except ImportError, err: + self.assertEqual("Import by filename is not supported.", + err.args[0]) + else: + self.fail("import by path didn't raise an exception") + class PathsTests(unittest.TestCase): path = TESTFN @@ -12,6 +12,10 @@ What's New in Python 2.6 alpha 1? Core and builtins ----------------- +- Bug #1776: __import__ must not accept filenames. Python 2.6 does no longer + support module loading by filename. It worked on some system by coincident + but it was never intended to work. + - Patch #1668: renamed THREADDEBUG envvar to PYTHONTHREADDEBUG. - Patch #602345: Add -B command line option, PYTHONDONTWRITEBYTECODE envvar diff --git a/Python/import.c b/Python/import.c index d9550f5..71ec20a 100644 --- a/Python/import.c +++ b/Python/import.c @@ -2055,6 +2055,16 @@ import_module_level(char *name, PyObject *globals, PyObject *locals, Py_ssize_t buflen = 0; PyObject *parent, *head, *next, *tail; + if (strchr(name, '/') != NULL +#ifdef MS_WINDOWS + || strchr(name, '\\') != NULL +#endif + ) { + PyErr_SetString(PyExc_ImportError, + "Import by filename is not supported."); + return NULL; + } + parent = get_parent(globals, buf, &buflen, level); if (parent == NULL) return NULL; |