Loading...
--- libmalloc/libmalloc-374.60.3/tests/zone_names.c
+++ libmalloc/libmalloc-521.120.7/tests/zone_names.c
@@ -7,12 +7,18 @@
 
 #include <darwintest.h>
 
+T_GLOBAL_META(T_META_RUN_CONCURRENTLY(true));
+
+#include <mach/mach.h>  // mach_task_self()
 #include <malloc/malloc.h>
+#include <malloc_private.h> // malloc_get_wrapped_zone()
 #include <stdlib.h>  // free()
 
-#include <../src/platform.h>  // CONFIG_NANOZONE
+#include "../src/platform.h"  // CONFIG_NANOZONE
 
-T_GLOBAL_META(T_META_RUN_CONCURRENTLY(true));
+T_GLOBAL_META(T_META_ENVVAR("MallocProbGuard=0"));
+// A local T_META_ENVVAR declaration will override all global ones so we have to
+// restate this on tests that use T_META_ENVVAR.
 
 static void
 check_zone_names(malloc_zone_t **zones, const char **names, uint32_t count)
@@ -33,14 +39,15 @@
 }
 
 T_DECL(default_zone, "Zone names: default",
-		T_META_ENVVAR("MallocNanoZone=0"))
+		T_META_ENVVAR("MallocNanoZone=0"), T_META_ENVVAR("MallocProbGuard=0"),
+		T_META_TAG_XZONE)
 {
 	const char *names[] = {"DefaultMallocZone"};
 	check_default_zone_names(names, 1);
 }
 
 T_DECL(default_zone_and_nano, "Zone names: default + nano",
-		T_META_ENVVAR("MallocNanoZone=1"))
+		T_META_ENVVAR("MallocNanoZone=1"), T_META_ENVVAR("MallocProbGuard=0"))
 {
 #if CONFIG_NANOZONE
 	const char *names[] = {"DefaultMallocZone", "MallocHelperZone"};
@@ -51,13 +58,14 @@
 }
 
 T_DECL(default_zone_and_pgm, "Zone names: default + ProbGuard",
-		T_META_ENVVAR("MallocProbGuard=1"), T_META_ENVVAR("MallocNanoZone=0"))
+		T_META_ENVVAR("MallocProbGuard=1"), T_META_ENVVAR("MallocNanoZone=0"),
+		T_META_TAG_XZONE)
 {
 	const char *names[] = {"ProbGuardMallocZone", "DefaultMallocZone"};
 	check_default_zone_names(names, 2);
 }
 
-T_DECL(zone_singletons, "Zone singletons")
+T_DECL(zone_singletons, "Zone singletons", T_META_TAG_XZONE)
 {
 	malloc_zone_t *zones[] = {
 		malloc_default_zone(),
@@ -86,7 +94,7 @@
 	T_EXPECT_EQ(call_malloc_zone_from_ptr(), virtual_zone, NULL);
 }
 
-T_DECL(zone_creation, "Zone creation")
+T_DECL(zone_creation, "Zone creation", T_META_TAG_XZONE)
 {
 	T_EXPECT_NULL(malloc_create_zone(0, 0)->zone_name, "No name");
 }
@@ -112,7 +120,7 @@
 	T_EXPECT_EQ(malloc_size(copy), 0ul, "copy freed");
 }
 
-T_DECL(malloc_set_zone_name, "malloc_set_zone_name")
+T_DECL(malloc_set_zone_name, "malloc_set_zone_name", T_META_TAG_XZONE)
 {
 	malloc_zone_t *zones[] = {
 		malloc_default_zone(),
@@ -124,3 +132,30 @@
 		check_set_zone_name(zones[i]);
 	}
 }
+
+static malloc_zone_t *
+get_wrapped_zone(malloc_zone_t *zone)
+{
+	malloc_zone_t *wrapped_zone;
+	kern_return_t kr = malloc_get_wrapped_zone(mach_task_self(),
+			/*memory_reader=*/NULL, (vm_address_t)zone, (vm_address_t *)&wrapped_zone);
+	T_QUIET; T_ASSERT_EQ(kr, KERN_SUCCESS, "malloc_get_wrapped_zone() failed");
+	T_EXPECT_NOTNULL(wrapped_zone, "Wrapped zone");
+	return wrapped_zone;
+}
+
+T_DECL(malloc_set_zone_name_on_wrapper_zone,
+		"Setting name of wrapper zone delegates to wrapped zone",
+		T_META_ENVVAR("MallocProbGuard=1"),
+		T_META_CHECK_LEAKS(false), // rdar://114740269
+		T_META_TAG_XZONE)
+{
+	malloc_zone_t *zone = malloc_zones[0];
+	malloc_zone_t *wrapped_zone = get_wrapped_zone(zone);
+
+	malloc_set_zone_name(zone, "test");
+
+	T_EXPECT_EQ_STR(malloc_get_zone_name(zone), "test", "Wrapper zone name");
+	T_EXPECT_EQ_STR(malloc_get_zone_name(wrapped_zone), "test-PGM-Wrapped",
+			"Wrapped zone name");
+}