From 880f529c04a5093e017bd41cf976ac62539a132c Mon Sep 17 00:00:00 2001 From: Thomas Heller Date: Tue, 15 Jul 2008 19:39:38 +0000 Subject: [PATCH] Issue #3313: Contrary to the man page, a failed dlopen() call does not always set a dlerror() message. --- Misc/NEWS | 3 +++ Modules/_ctypes/callproc.c | 5 ++++- Modules/dlmodule.c | 5 ++++- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS index 8562176dbe..d39bc59cd5 100644 --- 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. diff --git a/Modules/_ctypes/callproc.c b/Modules/_ctypes/callproc.c index b16d7b071a..01ba8a00c2 100644 --- a/Modules/_ctypes/callproc.c +++ b/Modules/_ctypes/callproc.c @@ -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); diff --git a/Modules/dlmodule.c b/Modules/dlmodule.c index ccf1cb1835..b2ea4f5326 100644 --- a/Modules/dlmodule.c +++ b/Modules/dlmodule.c @@ -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 -- 2.50.1