8 #define TEST_NAME "sodium_utils2"
11 #ifdef __SANITIZE_ADDRESS__
12 # warning The sodium_utils2 test is expected to fail with address sanitizer
15 static void segv_handler(int sig
)
17 printf("Intentional segfault / bus error caught\n");
20 signal(SIGSEGV
, SIG_DFL
);
23 signal(SIGBUS
, SIG_DFL
);
26 signal(SIGABRT
, SIG_DFL
);
37 if (sodium_malloc(SIZE_MAX
- 1U) != NULL
) {
40 if (sodium_allocarray(SIZE_MAX
/ 2U + 1U, SIZE_MAX
/ 2U) != NULL
) {
43 sodium_free(sodium_allocarray(0U, 0U));
44 sodium_free(sodium_allocarray(0U, 1U));
45 sodium_free(sodium_allocarray(1U, 0U));
47 buf
= sodium_allocarray(1000U, 50U);
48 memset(buf
, 0, 50000U);
51 sodium_free(sodium_malloc(0U));
53 for (i
= 0U; i
< 10000U; i
++) {
54 size
= randombytes_uniform(100000U);
55 buf
= sodium_malloc(size
);
58 sodium_mprotect_noaccess(buf
);
64 signal(SIGSEGV
, segv_handler
);
67 signal(SIGBUS
, segv_handler
);
70 signal(SIGABRT
, segv_handler
);
72 size
= randombytes_uniform(100000U);
73 buf
= sodium_malloc(size
);
75 sodium_mprotect_readonly(buf
);
76 sodium_mprotect_readwrite(buf
);
77 #ifndef __EMSCRIPTEN__
78 sodium_memzero(((unsigned char *)buf
) + size
, 1U);
79 sodium_mprotect_noaccess(buf
);
81 printf("Overflow not caught\n");