1241abc601b947c5e0e56791bd73a924ce872b4a1Jason Evans#include "test/jemalloc_test.h" 2241abc601b947c5e0e56791bd73a924ce872b4a1Jason Evans 3241abc601b947c5e0e56791bd73a924ce872b4a1Jason EvansTEST_BEGIN(test_overflow) 4241abc601b947c5e0e56791bd73a924ce872b4a1Jason Evans{ 5241abc601b947c5e0e56791bd73a924ce872b4a1Jason Evans unsigned nhchunks; 6241abc601b947c5e0e56791bd73a924ce872b4a1Jason Evans size_t mib[4]; 7241abc601b947c5e0e56791bd73a924ce872b4a1Jason Evans size_t sz, miblen, max_size_class; 8241abc601b947c5e0e56791bd73a924ce872b4a1Jason Evans void *p; 9241abc601b947c5e0e56791bd73a924ce872b4a1Jason Evans 10241abc601b947c5e0e56791bd73a924ce872b4a1Jason Evans sz = sizeof(unsigned); 118f61fdedb908c29905103b22dda32ceb29cd8edeJason Evans assert_d_eq(mallctl("arenas.nhchunks", (void *)&nhchunks, &sz, NULL, 0), 128f61fdedb908c29905103b22dda32ceb29cd8edeJason Evans 0, "Unexpected mallctl() error"); 13241abc601b947c5e0e56791bd73a924ce872b4a1Jason Evans 14241abc601b947c5e0e56791bd73a924ce872b4a1Jason Evans miblen = sizeof(mib) / sizeof(size_t); 15241abc601b947c5e0e56791bd73a924ce872b4a1Jason Evans assert_d_eq(mallctlnametomib("arenas.hchunk.0.size", mib, &miblen), 0, 16241abc601b947c5e0e56791bd73a924ce872b4a1Jason Evans "Unexpected mallctlnametomib() error"); 17241abc601b947c5e0e56791bd73a924ce872b4a1Jason Evans mib[2] = nhchunks - 1; 18241abc601b947c5e0e56791bd73a924ce872b4a1Jason Evans 19241abc601b947c5e0e56791bd73a924ce872b4a1Jason Evans sz = sizeof(size_t); 208f61fdedb908c29905103b22dda32ceb29cd8edeJason Evans assert_d_eq(mallctlbymib(mib, miblen, (void *)&max_size_class, &sz, 218f61fdedb908c29905103b22dda32ceb29cd8edeJason Evans NULL, 0), 0, "Unexpected mallctlbymib() error"); 22241abc601b947c5e0e56791bd73a924ce872b4a1Jason Evans 23241abc601b947c5e0e56791bd73a924ce872b4a1Jason Evans assert_ptr_null(malloc(max_size_class + 1), 24241abc601b947c5e0e56791bd73a924ce872b4a1Jason Evans "Expected OOM due to over-sized allocation request"); 25241abc601b947c5e0e56791bd73a924ce872b4a1Jason Evans assert_ptr_null(malloc(SIZE_T_MAX), 26241abc601b947c5e0e56791bd73a924ce872b4a1Jason Evans "Expected OOM due to over-sized allocation request"); 27241abc601b947c5e0e56791bd73a924ce872b4a1Jason Evans 28241abc601b947c5e0e56791bd73a924ce872b4a1Jason Evans assert_ptr_null(calloc(1, max_size_class + 1), 29241abc601b947c5e0e56791bd73a924ce872b4a1Jason Evans "Expected OOM due to over-sized allocation request"); 30241abc601b947c5e0e56791bd73a924ce872b4a1Jason Evans assert_ptr_null(calloc(1, SIZE_T_MAX), 31241abc601b947c5e0e56791bd73a924ce872b4a1Jason Evans "Expected OOM due to over-sized allocation request"); 32241abc601b947c5e0e56791bd73a924ce872b4a1Jason Evans 33241abc601b947c5e0e56791bd73a924ce872b4a1Jason Evans p = malloc(1); 34241abc601b947c5e0e56791bd73a924ce872b4a1Jason Evans assert_ptr_not_null(p, "Unexpected malloc() OOM"); 35241abc601b947c5e0e56791bd73a924ce872b4a1Jason Evans assert_ptr_null(realloc(p, max_size_class + 1), 36241abc601b947c5e0e56791bd73a924ce872b4a1Jason Evans "Expected OOM due to over-sized allocation request"); 37241abc601b947c5e0e56791bd73a924ce872b4a1Jason Evans assert_ptr_null(realloc(p, SIZE_T_MAX), 38241abc601b947c5e0e56791bd73a924ce872b4a1Jason Evans "Expected OOM due to over-sized allocation request"); 39241abc601b947c5e0e56791bd73a924ce872b4a1Jason Evans free(p); 40241abc601b947c5e0e56791bd73a924ce872b4a1Jason Evans} 41241abc601b947c5e0e56791bd73a924ce872b4a1Jason EvansTEST_END 42241abc601b947c5e0e56791bd73a924ce872b4a1Jason Evans 43241abc601b947c5e0e56791bd73a924ce872b4a1Jason Evansint 44241abc601b947c5e0e56791bd73a924ce872b4a1Jason Evansmain(void) 45241abc601b947c5e0e56791bd73a924ce872b4a1Jason Evans{ 46241abc601b947c5e0e56791bd73a924ce872b4a1Jason Evans 47241abc601b947c5e0e56791bd73a924ce872b4a1Jason Evans return (test( 48241abc601b947c5e0e56791bd73a924ce872b4a1Jason Evans test_overflow)); 49241abc601b947c5e0e56791bd73a924ce872b4a1Jason Evans} 50