From 3403f1589d769a5596dfc261a9cab31b307fb059 Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Wed, 9 Jan 2008 19:56:33 +0000 Subject: Fixed #1776. __import__() no longer imports modules by file name --- Lib/test/test_import.py | 12 +++++++++++- Misc/NEWS | 4 ++++ Python/import.c | 10 ++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) 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 diff --git a/Misc/NEWS b/Misc/NEWS index 7cd84d3..021c8e1c 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -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; -- cgit v0.12