]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Issue #3313: Contrary to the man page, a failed dlopen() call does not
authorThomas Heller <theller@ctypes.org>
Tue, 15 Jul 2008 19:39:38 +0000 (19:39 +0000)
committerThomas Heller <theller@ctypes.org>
Tue, 15 Jul 2008 19:39:38 +0000 (19:39 +0000)
always set a dlerror() message.

Misc/NEWS
Modules/_ctypes/callproc.c
Modules/dlmodule.c

index 8562176dbebc642adcc80e5253e85bb04352d33f..d39bc59cd59c71532f0e9f8a226e32d540d07227 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -57,6 +57,9 @@ Core and Builtins
 Library
 -------
 
+- Issue #3313: Fixed a crash when a failed dlopen() call does not set
+  a valid dlerror() message.
+
 - Issue #3258: Fixed a crash when a ctypes POINTER type to an
   incomplete structure was created.
 
index b16d7b071a0ad5373fc2cc7ebf86077ac79e650c..01ba8a00c2d933440c0c1bdd486ed3ef19e36487 100644 (file)
@@ -1410,8 +1410,11 @@ static PyObject *py_dl_open(PyObject *self, PyObject *args)
        mode |= RTLD_NOW;
        handle = ctypes_dlopen(name, mode);
        if (!handle) {
+               char *errmsg = ctypes_dlerror();
+               if (!errmsg)
+                       errmsg = "dlopen() error";
                PyErr_SetString(PyExc_OSError,
-                                      ctypes_dlerror());
+                                      errmsg);
                return NULL;
        }
        return PyLong_FromVoidPtr(handle);
index ccf1cb1835bbdda1f475f1abff97c1a3efe1d44f..b2ea4f53260f55e52c37a9a48076a15376abb728 100644 (file)
@@ -186,7 +186,10 @@ dl_open(PyObject *self, PyObject *args)
        }
        handle = dlopen(name, mode);
        if (handle == NULL) {
-               PyErr_SetString(Dlerror, dlerror());
+               char *errmsg = dlerror();
+               if (!errmsg)
+                       errmsg = "dlopen() error";
+               PyErr_SetString(Dlerror, errmsg);
                return NULL;
        }
 #ifdef __VMS