diff --git a/mod/box/tree.m b/mod/box/tree.m
index 5dbb3270878568fead6ab6b6dc89d16fdc56c335..b15fba9c34bf726654854c4bf4dd92fef23cbbd8 100644
--- a/mod/box/tree.m
+++ b/mod/box/tree.m
@@ -866,7 +866,8 @@ tree_iterator_free(struct iterator *iterator)
 - (struct box_tuple *) find: (void *) key : (int) key_cardinality
 {
 	struct key_data *key_data
-		= alloca(sizeof(struct key_data) + _SIZEOF_SPARSE_PARTS(1));
+		= alloca(sizeof(struct key_data) +
+			 _SIZEOF_SPARSE_PARTS(key_cardinality));
 
 	if (key_cardinality > key_def->part_count)
 		tnt_raise(ClientError, :ER_KEY_CARDINALITY,