diff --git a/src/box/alter.cc b/src/box/alter.cc
index 0683cfe2aa1ce7ef4f6d64f9546a71cbd14eadf2..09c26eec5798fc0a6725d44447149fa03f2026cb 100644
--- a/src/box/alter.cc
+++ b/src/box/alter.cc
@@ -460,7 +460,7 @@ space_def_new_from_tuple(struct tuple *tuple, uint32_t errcode,
 		return NULL;
 	struct field_def *fields = NULL;
 	uint32_t field_count;
-	if (field_def_array_decode(format, &field_count, region, &fields) != 0)
+	if (field_def_array_decode(&format, &fields, &field_count, region) != 0)
 		return NULL;
 	if (exact_field_count != 0 &&
 	    exact_field_count < field_count) {
diff --git a/src/box/field_def.c b/src/box/field_def.c
index fb62cd7ce620ac404715b7f2bf53332e5ef7d53b..313b194e5a3324047d9ebaefefac88dd65c48fa0 100644
--- a/src/box/field_def.c
+++ b/src/box/field_def.c
@@ -372,13 +372,16 @@ field_def_decode(struct field_def *field, const char **data,
 }
 
 int
-field_def_array_decode(const char *data, uint32_t *out_count,
-		       struct region *region, struct field_def **fields)
+field_def_array_decode(const char **data, struct field_def **fields,
+		       uint32_t *field_count, struct region *region)
 {
-	/* Type is checked by _space format. */
-	assert(mp_typeof(*data) == MP_ARRAY);
-	uint32_t count = mp_decode_array(&data);
-	*out_count = count;
+	if (mp_typeof(**data) != MP_ARRAY) {
+		diag_set(ClientError, ER_WRONG_SPACE_FORMAT,
+			 "expected an array");
+		return -1;
+	}
+	uint32_t count = mp_decode_array(data);
+	*field_count = count;
 	if (count == 0) {
 		*fields = NULL;
 		return 0;
@@ -393,8 +396,7 @@ field_def_array_decode(const char *data, uint32_t *out_count,
 		return -1;
 	}
 	for (uint32_t i = 0; i < count; ++i) {
-		if (field_def_decode(&region_defs[i], &data,
-				     i, region) != 0)
+		if (field_def_decode(&region_defs[i], data, i, region) != 0)
 			return -1;
 	}
 	*fields = region_defs;
diff --git a/src/box/field_def.h b/src/box/field_def.h
index 7abc6304adb27fbebf739236275caeea60ee00b7..70c57222404c8ab1b5e87a54bf06b9781a1d864e 100644
--- a/src/box/field_def.h
+++ b/src/box/field_def.h
@@ -202,16 +202,15 @@ action_is_nullable(enum on_conflict_action nullable_action)
 
 /**
  * Decode MessagePack array of fields.
- * @param data MessagePack array of fields.
- * @param[out] out_count Length of a result array.
- * @param region Region to allocate result array.
+ * @param[inout] data MessagePack array of fields.
  * @param[out] fields Array of fields.
- *
+ * @param[out] field_count Length of a result array.
+ * @param region Region to allocate result array.
  * @retval Error code.
  */
 int
-field_def_array_decode(const char *data, uint32_t *out_count,
-		       struct region *region, struct field_def **fields);
+field_def_array_decode(const char **data, struct field_def **fields,
+		       uint32_t *field_count, struct region *region);
 
 /**
  * Duplicates array of fields using malloc. Never fails.