bpo-36370: Check for PyErr_Occurred() after PyImport_GetModule() (GH-12504)
This commit is contained in:
parent
d1e768a677
commit
027b09c5a1
|
@ -4948,7 +4948,7 @@ import_from(PyObject *v, PyObject *name)
|
||||||
}
|
}
|
||||||
x = PyImport_GetModule(fullmodname);
|
x = PyImport_GetModule(fullmodname);
|
||||||
Py_DECREF(fullmodname);
|
Py_DECREF(fullmodname);
|
||||||
if (x == NULL) {
|
if (x == NULL && !PyErr_Occurred()) {
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
Py_DECREF(pkgname);
|
Py_DECREF(pkgname);
|
||||||
|
@ -4971,7 +4971,7 @@ import_from(PyObject *v, PyObject *name)
|
||||||
"cannot import name %R from %R (unknown location)",
|
"cannot import name %R from %R (unknown location)",
|
||||||
name, pkgname_or_unknown
|
name, pkgname_or_unknown
|
||||||
);
|
);
|
||||||
/* NULL check for errmsg done by PyErr_SetImportError. */
|
/* NULL checks for errmsg and pkgname done by PyErr_SetImportError. */
|
||||||
PyErr_SetImportError(errmsg, pkgname, NULL);
|
PyErr_SetImportError(errmsg, pkgname, NULL);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -4979,7 +4979,7 @@ import_from(PyObject *v, PyObject *name)
|
||||||
"cannot import name %R from %R (%S)",
|
"cannot import name %R from %R (%S)",
|
||||||
name, pkgname_or_unknown, pkgpath
|
name, pkgname_or_unknown, pkgpath
|
||||||
);
|
);
|
||||||
/* NULL check for errmsg done by PyErr_SetImportError. */
|
/* NULL checks for errmsg and pkgname done by PyErr_SetImportError. */
|
||||||
PyErr_SetImportError(errmsg, pkgname, pkgpath);
|
PyErr_SetImportError(errmsg, pkgname, pkgpath);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -966,11 +966,10 @@ exec_code_in_module(PyObject *name, PyObject *module_dict, PyObject *code_object
|
||||||
Py_DECREF(v);
|
Py_DECREF(v);
|
||||||
|
|
||||||
m = PyImport_GetModule(name);
|
m = PyImport_GetModule(name);
|
||||||
if (m == NULL) {
|
if (m == NULL && !PyErr_Occurred()) {
|
||||||
PyErr_Format(PyExc_ImportError,
|
PyErr_Format(PyExc_ImportError,
|
||||||
"Loaded module %R not found in sys.modules",
|
"Loaded module %R not found in sys.modules",
|
||||||
name);
|
name);
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return m;
|
return m;
|
||||||
|
@ -1735,6 +1734,10 @@ PyImport_ImportModuleLevelObject(PyObject *name, PyObject *globals,
|
||||||
}
|
}
|
||||||
|
|
||||||
mod = PyImport_GetModule(abs_name);
|
mod = PyImport_GetModule(abs_name);
|
||||||
|
if (mod == NULL && PyErr_Occurred()) {
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
if (mod != NULL && mod != Py_None) {
|
if (mod != NULL && mod != Py_None) {
|
||||||
_Py_IDENTIFIER(__spec__);
|
_Py_IDENTIFIER(__spec__);
|
||||||
_Py_IDENTIFIER(_lock_unlock_module);
|
_Py_IDENTIFIER(_lock_unlock_module);
|
||||||
|
@ -1810,9 +1813,11 @@ PyImport_ImportModuleLevelObject(PyObject *name, PyObject *globals,
|
||||||
final_mod = PyImport_GetModule(to_return);
|
final_mod = PyImport_GetModule(to_return);
|
||||||
Py_DECREF(to_return);
|
Py_DECREF(to_return);
|
||||||
if (final_mod == NULL) {
|
if (final_mod == NULL) {
|
||||||
PyErr_Format(PyExc_KeyError,
|
if (!PyErr_Occurred()) {
|
||||||
"%R not in sys.modules as expected",
|
PyErr_Format(PyExc_KeyError,
|
||||||
to_return);
|
"%R not in sys.modules as expected",
|
||||||
|
to_return);
|
||||||
|
}
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1875,6 +1880,10 @@ PyImport_ReloadModule(PyObject *m)
|
||||||
PyObject *reloaded_module = NULL;
|
PyObject *reloaded_module = NULL;
|
||||||
PyObject *imp = _PyImport_GetModuleId(&PyId_imp);
|
PyObject *imp = _PyImport_GetModuleId(&PyId_imp);
|
||||||
if (imp == NULL) {
|
if (imp == NULL) {
|
||||||
|
if (PyErr_Occurred()) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
imp = PyImport_ImportModule("imp");
|
imp = PyImport_ImportModule("imp");
|
||||||
if (imp == NULL) {
|
if (imp == NULL) {
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
|
@ -2157,8 +2157,10 @@ wait_for_thread_shutdown(void)
|
||||||
PyObject *result;
|
PyObject *result;
|
||||||
PyObject *threading = _PyImport_GetModuleId(&PyId_threading);
|
PyObject *threading = _PyImport_GetModuleId(&PyId_threading);
|
||||||
if (threading == NULL) {
|
if (threading == NULL) {
|
||||||
/* threading not imported */
|
if (PyErr_Occurred()) {
|
||||||
PyErr_Clear();
|
PyErr_WriteUnraisable(NULL);
|
||||||
|
}
|
||||||
|
/* else: threading not imported */
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
result = _PyObject_CallMethodId(threading, &PyId__shutdown, NULL);
|
result = _PyObject_CallMethodId(threading, &PyId__shutdown, NULL);
|
||||||
|
|
|
@ -283,7 +283,9 @@ sys_displayhook(PyObject *module, PyObject *o)
|
||||||
|
|
||||||
builtins = _PyImport_GetModuleId(&PyId_builtins);
|
builtins = _PyImport_GetModuleId(&PyId_builtins);
|
||||||
if (builtins == NULL) {
|
if (builtins == NULL) {
|
||||||
PyErr_SetString(PyExc_RuntimeError, "lost builtins module");
|
if (!PyErr_Occurred()) {
|
||||||
|
PyErr_SetString(PyExc_RuntimeError, "lost builtins module");
|
||||||
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
Py_DECREF(builtins);
|
Py_DECREF(builtins);
|
||||||
|
|
Loading…
Reference in New Issue