diff --git a/include/mem0mem.ic b/include/mem0mem.ic
index 6cfe1a6d532ef7108956ba10c2df3637a5f34381..76ef28031404f3377488656bf27807cff28c0217 100644
--- a/include/mem0mem.ic
+++ b/include/mem0mem.ic
@@ -390,7 +390,11 @@ mem_heap_free_top(
 				== mem_block_get_start(block))) {
 		mem_heap_block_free(heap, block);
 	} else {
-		UNIV_MEM_FREE((byte*) block + mem_block_get_free(block), n);
+		/* Avoid a bogus UNIV_MEM_ASSERT_W() warning in a
+		subsequent invocation of mem_heap_free_top().
+		Originally, this was UNIV_MEM_FREE(), to catch writes
+		to freed memory. */
+		UNIV_MEM_ALLOC((byte*) block + mem_block_get_free(block), n);
 	}
 }
 
diff --git a/ut/ut0ut.c b/ut/ut0ut.c
index 53048c87af345a6debb84014e58fd5cd65f10dc1..1a6f6bbb810bc783efccf4e86e268e0f8c08e475 100644
--- a/ut/ut0ut.c
+++ b/ut/ut0ut.c
@@ -360,6 +360,8 @@ ut_print_buf(
 	const byte*	data;
 	ulint		i;
 
+	UNIV_MEM_ASSERT_RW(buf, len);
+
 	fprintf(file, " len %lu; hex ", len);
 
 	for (data = (const byte*)buf, i = 0; i < len; i++) {