8 #define TEST_NAME "sodium_utils2"
11 #ifdef __SANITIZE_ADDRESS__
12 # warning The sodium_utils2 test is expected to fail with address sanitizer
15 __attribute__ ((noreturn
)) static void segv_handler(int sig
)
19 printf("Intentional segfault / bus error caught\n");
22 signal(SIGSEGV
, SIG_DFL
);
25 signal(SIGBUS
, SIG_DFL
);
28 signal(SIGABRT
, SIG_DFL
);
39 if (sodium_malloc(SIZE_MAX
- 1U) != NULL
) {
42 if (sodium_malloc(0U) == NULL
) {
45 if (sodium_allocarray(SIZE_MAX
/ 2U + 1U, SIZE_MAX
/ 2U) != NULL
) {
48 sodium_free(sodium_allocarray(0U, 0U));
49 sodium_free(sodium_allocarray(0U, 1U));
50 sodium_free(sodium_allocarray(1U, 0U));
52 buf
= sodium_allocarray(1000U, 50U);
53 memset(buf
, 0, 50000U);
56 sodium_free(sodium_malloc(0U));
58 for (i
= 0U; i
< 10000U; i
++) {
59 size
= 1U + randombytes_uniform(100000U);
60 buf
= sodium_malloc(size
);
63 sodium_mprotect_noaccess(buf
);
69 signal(SIGSEGV
, segv_handler
);
72 signal(SIGBUS
, segv_handler
);
75 signal(SIGABRT
, segv_handler
);
77 size
= 1U + randombytes_uniform(100000U);
78 buf
= sodium_malloc(size
);
80 sodium_mprotect_readonly(buf
);
81 sodium_mprotect_readwrite(buf
);
82 #ifndef __EMSCRIPTEN__
83 sodium_memzero(((unsigned char *)buf
) + size
, 1U);
84 sodium_mprotect_noaccess(buf
);
86 printf("Overflow not caught\n");