1*8e33eff8Schristos #include "test/jemalloc_test.h" 2*8e33eff8Schristos 3*8e33eff8Schristos static void 4*8e33eff8Schristos test_zero(size_t sz_min, size_t sz_max) { 5*8e33eff8Schristos uint8_t *s; 6*8e33eff8Schristos size_t sz_prev, sz, i; 7*8e33eff8Schristos #define MAGIC ((uint8_t)0x61) 8*8e33eff8Schristos 9*8e33eff8Schristos sz_prev = 0; 10*8e33eff8Schristos s = (uint8_t *)mallocx(sz_min, 0); 11*8e33eff8Schristos assert_ptr_not_null((void *)s, "Unexpected mallocx() failure"); 12*8e33eff8Schristos 13*8e33eff8Schristos for (sz = sallocx(s, 0); sz <= sz_max; 14*8e33eff8Schristos sz_prev = sz, sz = sallocx(s, 0)) { 15*8e33eff8Schristos if (sz_prev > 0) { 16*8e33eff8Schristos assert_u_eq(s[0], MAGIC, 17*8e33eff8Schristos "Previously allocated byte %zu/%zu is corrupted", 18*8e33eff8Schristos ZU(0), sz_prev); 19*8e33eff8Schristos assert_u_eq(s[sz_prev-1], MAGIC, 20*8e33eff8Schristos "Previously allocated byte %zu/%zu is corrupted", 21*8e33eff8Schristos sz_prev-1, sz_prev); 22*8e33eff8Schristos } 23*8e33eff8Schristos 24*8e33eff8Schristos for (i = sz_prev; i < sz; i++) { 25*8e33eff8Schristos assert_u_eq(s[i], 0x0, 26*8e33eff8Schristos "Newly allocated byte %zu/%zu isn't zero-filled", 27*8e33eff8Schristos i, sz); 28*8e33eff8Schristos s[i] = MAGIC; 29*8e33eff8Schristos } 30*8e33eff8Schristos 31*8e33eff8Schristos if (xallocx(s, sz+1, 0, 0) == sz) { 32*8e33eff8Schristos s = (uint8_t *)rallocx(s, sz+1, 0); 33*8e33eff8Schristos assert_ptr_not_null((void *)s, 34*8e33eff8Schristos "Unexpected rallocx() failure"); 35*8e33eff8Schristos } 36*8e33eff8Schristos } 37*8e33eff8Schristos 38*8e33eff8Schristos dallocx(s, 0); 39*8e33eff8Schristos #undef MAGIC 40*8e33eff8Schristos } 41*8e33eff8Schristos 42*8e33eff8Schristos TEST_BEGIN(test_zero_small) { 43*8e33eff8Schristos test_skip_if(!config_fill); 44*8e33eff8Schristos test_zero(1, SMALL_MAXCLASS-1); 45*8e33eff8Schristos } 46*8e33eff8Schristos TEST_END 47*8e33eff8Schristos 48*8e33eff8Schristos TEST_BEGIN(test_zero_large) { 49*8e33eff8Schristos test_skip_if(!config_fill); 50*8e33eff8Schristos test_zero(SMALL_MAXCLASS+1, (1U << (LG_LARGE_MINCLASS+1))); 51*8e33eff8Schristos } 52*8e33eff8Schristos TEST_END 53*8e33eff8Schristos 54*8e33eff8Schristos int 55*8e33eff8Schristos main(void) { 56*8e33eff8Schristos return test( 57*8e33eff8Schristos test_zero_small, 58*8e33eff8Schristos test_zero_large); 59*8e33eff8Schristos } 60