]> granicus.if.org Git - python/commitdiff
Fixed #1776. __import__() no longer imports modules by file name
authorChristian Heimes <christian@cheimes.de>
Wed, 9 Jan 2008 19:56:33 +0000 (19:56 +0000)
committerChristian Heimes <christian@cheimes.de>
Wed, 9 Jan 2008 19:56:33 +0000 (19:56 +0000)
Lib/test/test_import.py
Misc/NEWS
Python/import.c

index 9c44b878f0c20372d39132315df2b5a544609d06..a44170c9d75a62203fe150efc14abfb12129ad43 100644 (file)
@@ -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
 
index 7cd84d3966f2dbe716cd48265fb3054e5bfce8e0..021c8e1c00574a591ba12ba22d45156d6a73a77d 100644 (file)
--- 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
index d9550f5c682103e73382fa5d860638c925bfc6b1..71ec20a252e40363305bd0434eb07663d5369fb8 100644 (file)
@@ -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;