]> granicus.if.org Git - python/commitdiff
Close #15766: Catch exceptions while raising the ImportError in imp.load_dynamic()
authorVictor Stinner <victor.stinner@gmail.com>
Mon, 1 Oct 2012 22:55:07 +0000 (00:55 +0200)
committerVictor Stinner <victor.stinner@gmail.com>
Mon, 1 Oct 2012 22:55:07 +0000 (00:55 +0200)
Python/dynload_shlib.c

index 0ca65c78774c1dcef6274049fd22371c089628ad..6df6199ae8f2640ae7062df2e49066724f2cb1f7 100644 (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)