Close #15766: Catch exceptions while raising the ImportError in imp.load_dynamic()

This commit is contained in:
Victor Stinner 2012-10-02 00:55:07 +02:00
parent f25dabe1ec
commit 3b635cd447
1 changed files with 18 additions and 7 deletions

View File

@ -129,19 +129,30 @@ dl_funcptr _PyImport_GetDynLoadFunc(const char *shortname,
handle = dlopen(pathname, dlopenflags);
if (handle == NULL) {
PyObject *mod_name = NULL;
PyObject *path = NULL;
PyObject *error_ob = NULL;
PyObject *mod_name;
PyObject *path;
PyObject *error_ob;
const char *error = dlerror();
if (error == NULL)
error = "unknown dlopen() error";
error_ob = PyUnicode_FromString(error);
path = PyUnicode_FromString(pathname);
if (error_ob == NULL)
return NULL;
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);
Py_XDECREF(error_ob);
Py_XDECREF(path);
Py_XDECREF(mod_name);
Py_DECREF(error_ob);
Py_DECREF(mod_name);
Py_DECREF(path);
return NULL;
}
if (fp != NULL && nhandles < 128)