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