1#include "test/jemalloc_test.h" 2 3TEST_BEGIN(test_overflow) 4{ 5 unsigned nlextents; 6 size_t mib[4]; 7 size_t sz, miblen, max_size_class; 8 void *p; 9 10 sz = sizeof(unsigned); 11 assert_d_eq(mallctl("arenas.nlextents", (void *)&nlextents, &sz, NULL, 12 0), 0, "Unexpected mallctl() error"); 13 14 miblen = sizeof(mib) / sizeof(size_t); 15 assert_d_eq(mallctlnametomib("arenas.lextent.0.size", mib, &miblen), 0, 16 "Unexpected mallctlnametomib() error"); 17 mib[2] = nlextents - 1; 18 19 sz = sizeof(size_t); 20 assert_d_eq(mallctlbymib(mib, miblen, (void *)&max_size_class, &sz, 21 NULL, 0), 0, "Unexpected mallctlbymib() error"); 22 23 assert_ptr_null(malloc(max_size_class + 1), 24 "Expected OOM due to over-sized allocation request"); 25 assert_ptr_null(malloc(SIZE_T_MAX), 26 "Expected OOM due to over-sized allocation request"); 27 28 assert_ptr_null(calloc(1, max_size_class + 1), 29 "Expected OOM due to over-sized allocation request"); 30 assert_ptr_null(calloc(1, SIZE_T_MAX), 31 "Expected OOM due to over-sized allocation request"); 32 33 p = malloc(1); 34 assert_ptr_not_null(p, "Unexpected malloc() OOM"); 35 assert_ptr_null(realloc(p, max_size_class + 1), 36 "Expected OOM due to over-sized allocation request"); 37 assert_ptr_null(realloc(p, SIZE_T_MAX), 38 "Expected OOM due to over-sized allocation request"); 39 free(p); 40} 41TEST_END 42 43int 44main(void) 45{ 46 return (test( 47 test_overflow)); 48} 49