1 #include "test/jemalloc_test.h"
2
TEST_BEGIN(test_overflow)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
main(void)43 main(void) {
44 return test(
45 test_overflow);
46 }
47