diff --git a/tests/hattrie.c b/tests/hattrie.c
index e05a08ef9dbac85e042fcf5b265a8916315ce637..5048bb7b84f82c7537c282603136b1aa6004e3db 100644
--- a/tests/hattrie.c
+++ b/tests/hattrie.c
@@ -32,13 +32,11 @@ static char *randstr() {
 	s[len - 1] = '\0';
 	return s;
 }
-static bool str_check_sort(const char *prev, const char *cur)
+static bool str_check_sort(const char *prev, const char *cur, size_t l1, size_t l2)
 {
 	if (prev == NULL) {
 		return true;
 	}
-	int l1 = strlen(prev);
-	int l2 = strlen(cur);
 	int res = memcmp(prev, cur, MIN(l1, l2));
 	if (res == 0) { /* Keys may be equal. */
 		if (l1 > l2) { /* 'prev' is longer, breaks ordering. */
@@ -159,20 +157,27 @@ int main(int argc, char *argv[])
 	hattrie_iter_free(it);
 
 	/* Sorted iteration. */
-	size_t len = 0;
-	const char *cur = NULL, *prev = NULL;
+	size_t len = 0, prev_len = 0;
+	const char *cur = NULL;
+	char *prev = NULL;
 	counted = 0;
 	hattrie_build_index(t);
 	it = hattrie_iter_begin(t, true);
 	while (!hattrie_iter_finished(it)) {
 		cur = hattrie_iter_key(it, &len);
-		if (!str_check_sort(prev, cur)) {
+		if (!str_check_sort(prev, cur, prev_len, len)) {
+			diag("(%zu)'%s' < (%zu)'%s' FAIL\n",
+			     prev_len, prev, len, cur);
 			break;
 		}
 		++counted;
-		prev = cur;
+		free(prev);
+		prev = xmalloc(len);
+		memcpy(prev, cur, len);
+		prev_len = len;
 		hattrie_iter_next(it);
 	}
+	free(prev);
 	is_int(hattrie_weight(t), counted, "hattrie: sorted iteration");
 	hattrie_iter_free(it);