Loading...
--- libmalloc/libmalloc-521.120.7/tests/malloc_size_test.c
+++ libmalloc/libmalloc-657.80.3/tests/malloc_size_test.c
@@ -38,7 +38,7 @@
}
T_DECL(malloc_size_valid, "Test malloc_size() on valid pointers, non-Nano",
- T_META_ENVVAR("MallocNanoZone=0"), T_META_TAG_XZONE)
+ T_META_ENVVAR("MallocNanoZone=0"), T_META_TAG_XZONE, T_META_TAG_VM_NOT_PREFERRED)
{
// Test various sizes, roughly targetting each allocator range.
test_malloc_size_valid(2, 256, 16);
@@ -47,13 +47,13 @@
}
T_DECL(malloc_size_valid_nanov2, "Test malloc_size() on valid pointers for Nanov2",
- T_META_ENVVAR("MallocNanoZone=V2"), T_META_TAG_XZONE)
+ T_META_ENVVAR("MallocNanoZone=V2"), T_META_TAG_XZONE, T_META_TAG_VM_NOT_PREFERRED)
{
test_malloc_size_valid(2, 256, 16);
}
T_DECL(malloc_size_invalid, "Test malloc_size() on invalid pointers, non-Nano",
- T_META_ENVVAR("MallocNanoZone=0"))
+ T_META_ENVVAR("MallocNanoZone=0"), T_META_TAG_VM_NOT_PREFERRED)
{
// Test various sizes, roughly targetting each allocator range.
test_malloc_size_invalid(2, 256, 16);
@@ -62,14 +62,19 @@
}
T_DECL(malloc_size_invalid_nanov2, "Test malloc_size() on valid pointers for Nanov2",
- T_META_ENVVAR("MallocNanoZone=V2"))
+ T_META_ENVVAR("MallocNanoZone=V2"), T_META_TAG_VM_NOT_PREFERRED)
{
test_malloc_size_invalid(2, 256, 16);
}
+// Exclaves doesn't support calling malloc_size() on freed pointers,
+// specifically tiny ones, since the pages containing the inline freelist may
+// have been depopulated
+#if !MALLOC_TARGET_EXCLAVES
T_DECL(malloc_size_invalid_xzone,
"Test malloc_size() on invalid pointers for xzone",
- T_META_TAG_XZONE_ONLY)
+ T_META_TAG_XZONE_ONLY,
+ T_META_TAG_VM_NOT_PREFERRED)
{
// Exhaust early budget
void *ptr = NULL;
@@ -120,10 +125,11 @@
}
free(ptr2);
}
+#endif // !MALLOC_TARGET_EXCLAVES
#if TARGET_OS_OSX
T_DECL(malloc_size_large_allocation, "Test malloc_size() on buffers > 4GB",
- T_META_TAG_XZONE)
+ T_META_TAG_XZONE, T_META_TAG_VM_NOT_PREFERRED)
{
void *ptr = malloc(GiB(4));
T_ASSERT_NOTNULL(ptr, "4GB allocation");
@@ -139,14 +145,14 @@
T_DECL(malloc_size_multi_segment,
"Make a multi-segment allocation, and pass inner pointers to malloc_size",
- T_META_TAG_XZONE_ONLY)
+ T_META_TAG_XZONE_ONLY, T_META_TAG_VM_NOT_ELIGIBLE)
{
void *ptr = malloc(MiB(12));
T_ASSERT_NOTNULL(ptr, "HUGE allocation");
- T_ASSERT_LE(MiB(12), malloc_size(ptr), "Allocated sufficient size");
- T_ASSERT_EQ(0, malloc_size((void*)((uintptr_t)ptr + KiB(8))),
+ T_ASSERT_LE((size_t)MiB(12), malloc_size(ptr), "Allocated sufficient size");
+ T_ASSERT_EQ((size_t)0, malloc_size((void*)((uintptr_t)ptr + KiB(8))),
"malloc_size is 0 for inner huge pointer in first segment granule");
- T_ASSERT_EQ(0, malloc_size((void*)((uintptr_t)ptr + MiB(8))),
+ T_ASSERT_EQ((size_t)0, malloc_size((void*)((uintptr_t)ptr + MiB(8))),
"malloc_size is 0 for inner huge pointer in last segment granule");
free(ptr);
@@ -155,7 +161,7 @@
#if TARGET_OS_OSX
T_DECL(malloc_size_outside_embedded_space,
"Make enough allocations to push address space beyond 64GB",
- T_META_TAG_XZONE_ONLY)
+ T_META_TAG_XZONE_ONLY, T_META_TAG_VM_NOT_ELIGIBLE)
{
// Make 32 2GB allocations (don't fault them to avoid dirty memory) to
// exhaust the embedded/low segment table address space
@@ -182,3 +188,12 @@
}
}
#endif // TARGET_OS_OSX
+
+T_DECL(malloc_size_max_good_size, "Check malloc_good_size(SIZE_MAX)",
+ T_META_TAG_XZONE, T_META_TAG_NANO_ON_XZONE,
+ T_META_ENVVAR("MallocNanoZone=1"))
+{
+ size_t request_size = SIZE_MAX - 5;
+ size_t good_size = malloc_good_size(request_size);
+ T_ASSERT_GE(good_size, request_size, "good_size valid for request");
+}