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