summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2016-07-17 09:47:17 (GMT)
committerSerhiy Storchaka <storchaka@gmail.com>2016-07-17 09:47:17 (GMT)
commitb3b65e618c31e37458d5da46c8216f7c0404f547 (patch)
tree200f7ecc20f9c7391875e718483fe6ecd665bdff
parentdec25afab1c325c28621dda3ba2b32dbc200c8b3 (diff)
downloadcpython-b3b65e618c31e37458d5da46c8216f7c0404f547.zip
cpython-b3b65e618c31e37458d5da46c8216f7c0404f547.tar.gz
cpython-b3b65e618c31e37458d5da46c8216f7c0404f547.tar.bz2
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.
-rw-r--r--Misc/NEWS4
-rw-r--r--Python/import.c12
2 files changed, 8 insertions, 8 deletions
diff --git a/Misc/NEWS b/Misc/NEWS
index a79cfaf..714bf6a 100644
--- 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
diff --git a/Python/import.c b/Python/import.c
index 1312fd0..c1dc9a0 100644
--- a/Python/import.c
+++ b/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);