From 458e37f68e1836e456e1b6a4e383f53476a0c2f1 Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Mon, 12 Mar 2007 19:22:52 +0000 Subject: make sure dlsym() properly returns NULL with undefined symbols --- test/dlopen/Makefile | 4 +++- test/dlopen/dlundef.c | 29 +++++++++++++++++++++++++++++ test/dlopen/libundef.c | 15 +++++++++++++++ 3 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 test/dlopen/dlundef.c create mode 100644 test/dlopen/libundef.c (limited to 'test') diff --git a/test/dlopen/Makefile b/test/dlopen/Makefile index defe764ed..db989b2a9 100644 --- a/test/dlopen/Makefile +++ b/test/dlopen/Makefile @@ -4,7 +4,7 @@ # rules need a little love to work with glibc ... export UCLIBC_ONLY := 1 -TESTS := dltest dltest2 dlstatic test1 test2 test3 +TESTS := dltest dltest2 dlstatic test1 test2 test3 dlundef include ../Test.mak @@ -14,6 +14,7 @@ CFLAGS_dltest2 := -DLIBNAME="\"./libtest3.so\"" LDFLAGS_dlstatic := -ldl LDFLAGS_dltest := -ldl -lpthread LDFLAGS_dltest2 := -ldl -lpthread +LDFLAGS_dlundef := -ldl LDFLAGS_test1 := -ldl LDFLAGS_test2 := -ldl LDFLAGS_test3 := -ldl ./libtest1.so ./libtest2.so -Wl,-rpath,. @@ -24,6 +25,7 @@ WRAPPER := env $(DEBUG_LIBS)=all LD_LIBRARY_PATH="$$PWD:.:$(LD_LIBRARY_PATH)" dltest: libtest.so dltest2: libtest3.so dlstatic: libstatic.so +dlundef: libundef.so test1: libtest1.so test2: libtest1.so libtest2.so test3: libtest1.so libtest2.so diff --git a/test/dlopen/dlundef.c b/test/dlopen/dlundef.c new file mode 100644 index 000000000..cefd93318 --- /dev/null +++ b/test/dlopen/dlundef.c @@ -0,0 +1,29 @@ +#include +#include +#include +#include +#include + +#define LIBNAME "libundef.so" + +int main(int argc, char **argv) +{ + void *handle; + int (*myundefined)(void); + + handle = dlopen(LIBNAME, RTLD_LAZY); + if (!handle) { + fprintf(stderr, "Could not open ./%s: %s\n", LIBNAME, dlerror()); + return EXIT_FAILURE; + } + + myundefined = dlsym(handle, "__booga_booga_you_cant_touch_this__"); + if (myundefined != NULL) { + fprintf(stderr, "dlsym() found a symbol that does not exist!\n"); + return EXIT_FAILURE; + } + + dlclose(handle); + + return EXIT_SUCCESS; +} diff --git a/test/dlopen/libundef.c b/test/dlopen/libundef.c new file mode 100644 index 000000000..bf44c3c68 --- /dev/null +++ b/test/dlopen/libundef.c @@ -0,0 +1,15 @@ +#include + +static int global_static = -1; + +int static_test(void) +{ + static int local_static = -2; + + if (global_static != -1) + printf("FAIL: global_static is not -1\n"); + if (local_static != -2) + printf("FAIL: local_static is not -2\n"); + + return (global_static == -1 && local_static == -2); +} -- cgit v1.2.3