]> granicus.if.org Git - python/commitdiff
Issue #27419: Standard __import__() no longer look up "__import__" in globals
authorSerhiy Storchaka <storchaka@gmail.com>
Sun, 17 Jul 2016 09:47:17 +0000 (12:47 +0300)
committerSerhiy Storchaka <storchaka@gmail.com>
Sun, 17 Jul 2016 09:47:17 +0000 (12:47 +0300)
or builtins for importing submodules or "from import".  Fixed handling an
error of non-string package name.

Misc/NEWS
Python/import.c

index a79cfaf88a7b45da62f38de1fc501596e9eae191..714bf6a25705f9b9b98fe80ff050a7129ff179c4 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -10,6 +10,10 @@ Release date: TBA
 Core and Builtins
 -----------------
 
+- Issue #27419: Standard __import__() no longer look up "__import__" in globals
+  or builtins for importing submodules or "from import".  Fixed handling an
+  error of non-string package name.
+
 - Issue #27083: Respect the PYTHONCASEOK environment variable under Windows.
 
 - Issue #27514: Make having too many statically nested blocks a SyntaxError
index 1312fd0281dd155f8750633ba1dfdae957b732b4..c1dc9a06c53336bea553814e645b643464b60dba 100644 (file)
@@ -1438,6 +1438,7 @@ PyImport_ImportModuleLevelObject(PyObject *name, PyObject *given_globals,
             }
             else if (!PyUnicode_Check(package)) {
                 PyErr_SetString(PyExc_TypeError, "__name__ must be a string");
+                goto error;
             }
             Py_INCREF(package);
 
@@ -1525,15 +1526,10 @@ PyImport_ImportModuleLevelObject(PyObject *name, PyObject *given_globals,
     _PyImport_AcquireLock();
 #endif
    /* From this point forward, goto error_with_unlock! */
-    if (PyDict_Check(globals)) {
-        builtins_import = _PyDict_GetItemId(globals, &PyId___import__);
-    }
+    builtins_import = _PyDict_GetItemId(interp->builtins_copy, &PyId___import__);
     if (builtins_import == NULL) {
-        builtins_import = _PyDict_GetItemId(interp->builtins, &PyId___import__);
-        if (builtins_import == NULL) {
-            PyErr_SetString(PyExc_ImportError, "__import__ not found");
-            goto error_with_unlock;
-        }
+        PyErr_SetString(PyExc_ImportError, "__import__ not found");
+        goto error_with_unlock;
     }
     Py_INCREF(builtins_import);