From 3008bc0f4abb3f71433b1fcd97cc801da0a866cc Mon Sep 17 00:00:00 2001 From: Brett Cannon Date: Tue, 11 Aug 2015 18:01:31 -0700 Subject: Issue #24492: make sure that ``from ... import ...` raises an ImportError if __name__ is not defined on a package. Thanks to Armin Rigo for the bug report and diagnosing the cause. --- Python/ceval.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) (limited to 'Python') diff --git a/Python/ceval.c b/Python/ceval.c index ac52ad91e2..8d2cdc2eda 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -5085,19 +5085,24 @@ import_from(PyObject *v, PyObject *name) sys.modules. */ PyErr_Clear(); pkgname = _PyObject_GetAttrId(v, &PyId___name__); - if (pkgname == NULL) - return NULL; + if (pkgname == NULL) { + goto error; + } fullmodname = PyUnicode_FromFormat("%U.%U", pkgname, name); Py_DECREF(pkgname); - if (fullmodname == NULL) + if (fullmodname == NULL) { return NULL; + } x = PyDict_GetItem(PyImport_GetModuleDict(), fullmodname); - if (x == NULL) - PyErr_Format(PyExc_ImportError, "cannot import name %R", name); - else - Py_INCREF(x); Py_DECREF(fullmodname); + if (x == NULL) { + goto error; + } + Py_INCREF(x); return x; + error: + PyErr_Format(PyExc_ImportError, "cannot import name %R", name); + return NULL; } static int -- cgit v1.2.1