diff Python/dynload_shlib.c @ 79393:f3ed5e211fcc

Close #15766: Catch exceptions while raising the ImportError in imp.load_dynamic()
author Victor Stinner <victor.stinner@gmail.com>
date Tue, 02 Oct 2012 00:55:07 +0200
parents eaac55703796
children ffc6e6b00949
line wrap: on
line diff
--- a/Python/dynload_shlib.c	Tue Oct 02 01:46:49 2012 +0300
+++ b/Python/dynload_shlib.c	Tue Oct 02 00:55:07 2012 +0200
@@ -129,19 +129,30 @@
     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);
+        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);
-        mod_name = PyUnicode_FromString(shortname);
+        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)