[3.6] bpo-31492: Fix assertion failures in case of a module with a bad __name__ attribute. (GH-3620). (#3773)

(cherry picked from commit 6db7033192)
This commit is contained in:
Serhiy Storchaka 2017-09-27 07:33:00 +03:00 committed by GitHub
parent a1c49f6f09
commit f0db2dfda7
4 changed files with 20 additions and 4 deletions

View file

@ -667,14 +667,11 @@ module_getattro(PyModuleObject *m, PyObject *name)
if (m->md_dict) {
_Py_IDENTIFIER(__name__);
mod_name = _PyDict_GetItemId(m->md_dict, &PyId___name__);
if (mod_name) {
if (mod_name && PyUnicode_Check(mod_name)) {
PyErr_Format(PyExc_AttributeError,
"module '%U' has no attribute '%U'", mod_name, name);
return NULL;
}
else if (PyErr_Occurred()) {
PyErr_Clear();
}
}
PyErr_Format(PyExc_AttributeError,
"module has no attribute '%U'", name);