Loading...
#include <darwintest.h> #include <stdlib.h> #include <stdint.h> #include <malloc/malloc.h> T_DECL(realloc_failure, "realloc failure", T_META_TAG_ALL_ALLOCATORS, T_META_TAG("no_debug"), T_META_TAG_VM_PREFERRED) { void *a = malloc(16); T_ASSERT_NOTNULL(a, "malloc(16)"); void *b = realloc(a, SIZE_MAX - (1 << 17)); errno_t error = errno; size_t a_sz = malloc_size(a); T_ASSERT_NULL(b, "realloc should fail"); T_ASSERT_EQ(error, ENOMEM, "failure should have been ENOMEM"); T_ASSERT_GT(a_sz, 0ul, "The original pointer should not have been freed"); free(a); } T_DECL(reallocf_failure, "reallocf failure", T_META_TAG_ALL_ALLOCATORS, T_META_TAG("no_debug"), T_META_TAG_VM_PREFERRED) { // rdar://134443969: Avoid the tiny zone because it may madvise void *a = malloc(65536); T_ASSERT_NOTNULL(a, "malloc(65536)"); void *b = reallocf(a, SIZE_MAX - (1 << 17)); errno_t error = errno; size_t a_sz = malloc_size(a); T_ASSERT_NULL(b, "reallocf should fail"); T_ASSERT_EQ(error, ENOMEM, "failure should have been ENOMEM"); T_ASSERT_EQ(a_sz, 0ul, "The original pointer should have been freed"); } |