From e16a6e8eb4f81144a14d31b66774c65e900caa7d Mon Sep 17 00:00:00 2001 From: Timothy Gu Date: Mon, 10 Feb 2014 03:46:33 +0000 Subject: test: add trying to load nonexistent symbols test --- test.c | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 82 insertions(+), 1 deletion(-) diff --git a/test.c b/test.c index b8f6c9e..4dff8f0 100644 --- a/test.c +++ b/test.c @@ -42,15 +42,20 @@ * - Get global object * - Get symbol from library through library object <- works * - Run function if it worked + * - Get nonexistent symbol from library through library object <- fails * - Get symbol from library through global object <- works * - Run function if it worked + * - Get nonexistent symbol from library through global object <- fails * - Close library * - Open library with RTLD_LOCAL * - Get symbol from library through library object <- works * - Run function if it worked - * - Get symbol from library through global object <- fails + * - Get nonexistent symbol from library through library object <- fails + * - Get local symbol from library through global object <- fails + * - Get nonexistent local symbol from library through global object <- fails * - Open library again (without closing it first) with RTLD_GLOBAL * - Get symbol from library through global object <- works + * - Get nonexistent symbol from library through global object <- fails * - Close library * - Close global object * @@ -63,6 +68,7 @@ int main() void *library; char *error; int (*function)( void ); + int (*nonexistentfunction)( void ); int ret; library = dlopen( "testdll.dll", RTLD_GLOBAL ); @@ -101,6 +107,21 @@ int main() RUNFUNC; + nonexistentfunction = dlsym( library, "nonexistentfunction" ); + if( nonexistentfunction ) + { + error = dlerror( ); + printf( "ERROR\tGot nonexistent symbol from library handle: %p\n", nonexistentfunction ); + CLOSE_LIB; + CLOSE_GLOBAL; + RETURN_ERROR; + } + else { + error = dlerror( ); + printf( "SUCCESS\tCould not get nonexistent symbol from library handle: %s\n", + error ? error : "" ); + } + function = dlsym( global, "function" ); if( !function ) { @@ -116,6 +137,21 @@ int main() RUNFUNC; + nonexistentfunction = dlsym( global, "nonexistentfunction" ); + if( nonexistentfunction ) + { + error = dlerror( ); + printf( "ERROR\tGot nonexistent symbol from global handle: %p\n", nonexistentfunction ); + CLOSE_LIB; + CLOSE_GLOBAL; + RETURN_ERROR; + } + else { + error = dlerror( ); + printf( "SUCCESS\tCould not get nonexistent symbol from global handle: %s\n", + error ? error : "" ); + } + ret = dlclose( library ); if( ret ) { @@ -153,6 +189,21 @@ int main() RUNFUNC; + nonexistentfunction = dlsym( library, "nonexistentfunction" ); + if( nonexistentfunction ) + { + error = dlerror( ); + printf( "ERROR\tGot nonexistent symbol from library handle: %p\n", nonexistentfunction ); + CLOSE_LIB; + CLOSE_GLOBAL; + RETURN_ERROR; + } + else { + error = dlerror( ); + printf( "SUCCESS\tCould not get nonexistent symbol from library handle: %s\n", + error ? error : "" ); + } + function = dlsym( global, "function" ); if( function ) { @@ -166,6 +217,21 @@ int main() else printf( "SUCCESS\tDid not get local symbol from global handle.\n" ); + nonexistentfunction = dlsym( global, "nonexistentfunction" ); + if( nonexistentfunction ) + { + error = dlerror( ); + printf( "ERROR\tGot nonexistent local symbol from global handle: %p\n", nonexistentfunction ); + CLOSE_LIB; + CLOSE_GLOBAL; + RETURN_ERROR; + } + else { + error = dlerror( ); + printf( "SUCCESS\tDid not get nonexistent local symbol from global handle: %s\n", + error ? error : "" ); + } + library = dlopen( "testdll.dll", RTLD_GLOBAL ); if( !library ) { @@ -193,6 +259,21 @@ int main() RUNFUNC; + nonexistentfunction = dlsym( global, "nonexistentfunction" ); + if( nonexistentfunction ) + { + error = dlerror( ); + printf( "ERROR\tGot nonexistent symbol from global handle: %p\n", nonexistentfunction ); + CLOSE_LIB; + CLOSE_GLOBAL; + RETURN_ERROR; + } + else { + error = dlerror( ); + printf( "SUCCESS\tCould not get nonexistent symbol from global handle: %s\n", + error ? error : "" ); + } + ret = dlclose( library ); if( ret ) { -- cgit v1.2.3-55-g6feb