• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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