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