summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Heimes <christian@cheimes.de>2008-01-09 19:56:33 (GMT)
committerChristian Heimes <christian@cheimes.de>2008-01-09 19:56:33 (GMT)
commit3403f1589d769a5596dfc261a9cab31b307fb059 (patch)
tree9e24a9ae128fda398b29cc839f05ae45a98d12ac
parent195b883bb47a392ea8b92dccbca30ffcf1adecd3 (diff)
downloadcpython-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.py12
-rw-r--r--Misc/NEWS4
-rw-r--r--Python/import.c10
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
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;