Browse Source

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.
pull/40/head
Serhiy Storchaka 10 years ago
parent
commit
b3b65e618c
  1. 4
      Misc/NEWS
  2. 12
      Python/import.c

4
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

12
Python/import.c

@ -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);

Loading…
Cancel
Save