Date: Sat, 08 May 2021 07:10:55 +0000 From: bugzilla-noreply@freebsd.org To: bugs@FreeBSD.org Subject: [Bug 255698] dlerror() returns non-NULL after a successful call to dlopen()/dlsym() Message-ID: <bug-255698-227@https.bugs.freebsd.org/bugzilla/>
next in thread | raw e-mail | index | archive | help
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D255698 Bug ID: 255698 Summary: dlerror() returns non-NULL after a successful call to dlopen()/dlsym() Product: Base System Version: CURRENT Hardware: Any OS: Any Status: New Severity: Affects Only Me Priority: --- Component: bin Assignee: bugs@FreeBSD.org Reporter: astralblue@gmail.com dlerror() used to return NULL after a successful call to other dl family of functions, such as dlopen() and dlsym(). Starting recently, dlerror() star= ted returning non-NULL message after such successful calls. The message is initially an empty string, or an error message most recently seen=E2=80=94e= ven if the most recent dlXXXX() call was successful. Test program: #include <dlfcn.h> #include <stdio.h> #define PRINT_DLERROR() do { \ char const *err =3D dlerror(); \ printf("dlerror()=3D%p", err); \ if (err) printf(" (%s)", err); \ printf("\n"); \ } while (0) void test_dlopen(char const *path) { void *handle =3D dlopen(path, RTLD_NOW); printf("dlopen(%s, RTLD_NOW)=3D%p\n", path, handle); PRINT_DLERROR(); PRINT_DLERROR(); if (handle) dlclose(handle); } int main() { PRINT_DLERROR(); PRINT_DLERROR(); test_dlopen("/foobar.so"); test_dlopen("/usr/lib/libm.so"); return 0; } Expected result (taken on a 12.2-RELEASE-p2 jail, note dlerror() returns NU= LL upon a successful dlopen()): dlerror()=3D0x0 dlerror()=3D0x0 dlopen(/foobar.so, RTLD_NOW)=3D0x0 dlerror()=3D0x8002296c0 (Cannot open "/foobar.so") dlerror()=3D0x0 dlopen(/usr/lib/libm.so, RTLD_NOW)=3D0x80022e800 dlerror()=3D0x0 dlerror()=3D0x0 Actual result (taken on a -CURRENT system, built from main branch commit 34abb05be77a32a2b2673fb4b85eaa53a3d1446e, note dlerror() returns non-NULL on the first dlerror() call, even after a successful dlopen() and also before = the first dlopen(), also note the dlerror() message after a successful dlopen()= is from the previous failure): 34abb05be77a32a2b2673fb4b85eaa53a3d1446e --=20 You are receiving this mail because: You are the assignee for the bug.=
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-255698-227>