diff options
Diffstat (limited to 'test/default/sodium_utils3.c')
-rw-r--r-- | test/default/sodium_utils3.c | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/test/default/sodium_utils3.c b/test/default/sodium_utils3.c new file mode 100644 index 0000000..f2bcdae --- /dev/null +++ b/test/default/sodium_utils3.c @@ -0,0 +1,50 @@ + +#include <sys/types.h> + +#include <limits.h> +#include <signal.h> + +#define TEST_NAME "sodium_utils3" +#include "cmptest.h" + +static void segv_handler(int sig) +{ + printf("Intentional segfault / bus error caught\n"); + printf("OK\n"); +#ifdef SIGSEGV + signal(SIGSEGV, SIG_DFL); +#endif +#ifdef SIGBUS + signal(SIGBUS, SIG_DFL); +#endif +#ifdef SIGABRT + signal(SIGABRT, SIG_DFL); +#endif + exit(0); +} + +int main(void) +{ + void *buf; + size_t size; + +#ifdef SIGSEGV + signal(SIGSEGV, segv_handler); +#endif +#ifdef SIGBUS + signal(SIGBUS, segv_handler); +#endif +#ifdef SIGABRT + signal(SIGABRT, segv_handler); +#endif + size = randombytes_uniform(100000U); + buf = sodium_malloc(size); + sodium_mprotect_noaccess(buf); + sodium_mprotect_readwrite(buf); + sodium_memzero(((unsigned char *)buf) - 8, 8U); + sodium_mprotect_readonly(buf); + sodium_free(buf); + printf("Underflow not caught\n"); + + return 0; +} |