mirror of
https://github.com/python/cpython.git
synced 2025-11-15 08:01:29 +00:00
Close #15766: Catch exceptions while raising the ImportError in imp.load_dynamic()
This commit is contained in:
parent
f25dabe1ec
commit
3b635cd447
1 changed files with 18 additions and 7 deletions
|
|
@ -129,19 +129,30 @@ dl_funcptr _PyImport_GetDynLoadFunc(const char *shortname,
|
||||||
handle = dlopen(pathname, dlopenflags);
|
handle = dlopen(pathname, dlopenflags);
|
||||||
|
|
||||||
if (handle == NULL) {
|
if (handle == NULL) {
|
||||||
PyObject *mod_name = NULL;
|
PyObject *mod_name;
|
||||||
PyObject *path = NULL;
|
PyObject *path;
|
||||||
PyObject *error_ob = NULL;
|
PyObject *error_ob;
|
||||||
const char *error = dlerror();
|
const char *error = dlerror();
|
||||||
if (error == NULL)
|
if (error == NULL)
|
||||||
error = "unknown dlopen() error";
|
error = "unknown dlopen() error";
|
||||||
error_ob = PyUnicode_FromString(error);
|
error_ob = PyUnicode_FromString(error);
|
||||||
path = PyUnicode_FromString(pathname);
|
if (error_ob == NULL)
|
||||||
|
return NULL;
|
||||||
mod_name = PyUnicode_FromString(shortname);
|
mod_name = PyUnicode_FromString(shortname);
|
||||||
|
if (mod_name == NULL) {
|
||||||
|
Py_DECREF(error_ob);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
path = PyUnicode_FromString(pathname);
|
||||||
|
if (path == NULL) {
|
||||||
|
Py_DECREF(error_ob);
|
||||||
|
Py_DECREF(mod_name);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
PyErr_SetImportError(error_ob, mod_name, path);
|
PyErr_SetImportError(error_ob, mod_name, path);
|
||||||
Py_XDECREF(error_ob);
|
Py_DECREF(error_ob);
|
||||||
Py_XDECREF(path);
|
Py_DECREF(mod_name);
|
||||||
Py_XDECREF(mod_name);
|
Py_DECREF(path);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
if (fp != NULL && nhandles < 128)
|
if (fp != NULL && nhandles < 128)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue