libsodium 1.0.8
[tomato.git] / release / src / router / libsodium / test / default / sodium_utils3.c
blobbf261e6be3e12f481f6d6e4f313af7c1c6c56ac1
2 #include <stdlib.h>
3 #include <sys/types.h>
5 #include <limits.h>
6 #include <signal.h>
8 #define TEST_NAME "sodium_utils3"
9 #include "cmptest.h"
11 #ifdef __SANITIZE_ADDRESS__
12 # warning The sodium_utils3 test is expected to fail with address sanitizer
13 #endif
15 static void segv_handler(int sig)
17 printf("Intentional segfault / bus error caught\n");
18 printf("OK\n");
19 #ifdef SIGSEGV
20 signal(SIGSEGV, SIG_DFL);
21 #endif
22 #ifdef SIGBUS
23 signal(SIGBUS, SIG_DFL);
24 #endif
25 #ifdef SIGABRT
26 signal(SIGABRT, SIG_DFL);
27 #endif
28 exit(0);
31 int main(void)
33 void *buf;
34 size_t size;
36 #ifdef SIGSEGV
37 signal(SIGSEGV, segv_handler);
38 #endif
39 #ifdef SIGBUS
40 signal(SIGBUS, segv_handler);
41 #endif
42 #ifdef SIGABRT
43 signal(SIGABRT, segv_handler);
44 #endif
45 size = randombytes_uniform(100000U);
46 buf = sodium_malloc(size);
47 assert(buf != NULL);
48 sodium_mprotect_noaccess(buf);
49 sodium_mprotect_readwrite(buf);
50 #ifndef __EMSCRIPTEN__
51 sodium_memzero(((unsigned char *)buf) - 8, 8U);
52 sodium_mprotect_readonly(buf);
53 sodium_free(buf);
54 printf("Underflow not caught\n");
55 #endif
56 return 0;