void CheckArgumentsOverflow() { void *p; const size_t params[] = {SIZE_MAX, SIZE_MAX-16}; for (unsigned i=0; i<Harness::array_length(params); i++) { p = Tmalloc(params[i]); ASSERT(!p, NULL); ASSERT_ERRNO(errno==ENOMEM, NULL); p = Trealloc(NULL, params[i]); ASSERT(!p, NULL); ASSERT_ERRNO(errno==ENOMEM, NULL); p = Tcalloc(1, params[i]); ASSERT(!p, NULL); ASSERT_ERRNO(errno==ENOMEM, NULL); p = Tcalloc(params[i], 1); ASSERT(!p, NULL); ASSERT_ERRNO(errno==ENOMEM, NULL); } const size_t max_alignment = size_t(1) << (sizeof(size_t)*CHAR_BIT - 1); if (Rposix_memalign) { int ret = Rposix_memalign(&p, max_alignment, ~max_alignment); ASSERT(ret == ENOMEM, NULL); for (unsigned i=0; i<Harness::array_length(params); i++) { ret = Rposix_memalign(&p, max_alignment, params[i]); ASSERT(ret == ENOMEM, NULL); ret = Rposix_memalign(&p, sizeof(void*), params[i]); ASSERT(ret == ENOMEM, NULL); } } if (Raligned_malloc) { p = Raligned_malloc(~max_alignment, max_alignment); ASSERT(!p, NULL); for (unsigned i=0; i<Harness::array_length(params); i++) { p = Raligned_malloc(params[i], max_alignment); ASSERT(!p, NULL); ASSERT_ERRNO(errno==ENOMEM, NULL); p = Raligned_malloc(params[i], sizeof(void*)); ASSERT(!p, NULL); ASSERT_ERRNO(errno==ENOMEM, NULL); } } p = Tcalloc(SIZE_MAX/2-16, SIZE_MAX/2-16); ASSERT(!p, NULL); ASSERT_ERRNO(errno==ENOMEM, NULL); p = Tcalloc(SIZE_MAX/2, SIZE_MAX/2); ASSERT(!p, NULL); ASSERT_ERRNO(errno==ENOMEM, NULL); }
int Tposix_memalign(void **memptr, size_t alignment, size_t size) { int ret = Rposix_memalign(memptr, alignment, size); if (0 == ret) ASSERT(0==((uintptr_t)*memptr & (alignment-1)), "allocation result should be aligned"); return ret; }