xref: /aosp_15_r20/external/jemalloc_new/test/integration/overflow.c (revision 1208bc7e437ced7eb82efac44ba17e3beba411da)
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