[Python-checkins] cpython: Close #15766: Catch exceptions while raising the ImportError in

victor.stinner python-checkins at python.org
Tue Oct 2 00:59:56 CEST 2012


http://hg.python.org/cpython/rev/f3ed5e211fcc
changeset:   79393:f3ed5e211fcc
user:        Victor Stinner <victor.stinner at gmail.com>
date:        Tue Oct 02 00:55:07 2012 +0200
summary:
  Close #15766: Catch exceptions while raising the ImportError in imp.load_dynamic()

files:
  Python/dynload_shlib.c |  25 ++++++++++++++++++-------
  1 files changed, 18 insertions(+), 7 deletions(-)


diff --git a/Python/dynload_shlib.c b/Python/dynload_shlib.c
--- a/Python/dynload_shlib.c
+++ b/Python/dynload_shlib.c
@@ -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)

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list