From 333e4f3c10a7c4275b505527825670dba5110512 Mon Sep 17 00:00:00 2001
From: Alexandr <a.lyapunov@corp.mail.ru>
Date: Fri, 7 Mar 2014 17:08:33 +0400
Subject: [PATCH] gh-140 likely final fix

---
 src/box/tuple.cc    | 17 ++++++++++++-----
 src/box/tuple.h     | 11 -----------
 test/box/lua.result |  2 +-
 3 files changed, 13 insertions(+), 17 deletions(-)

diff --git a/src/box/tuple.cc b/src/box/tuple.cc
index 793ec47863..ee56448f95 100644
--- a/src/box/tuple.cc
+++ b/src/box/tuple.cc
@@ -374,17 +374,24 @@ tuple_update(struct tuple_format *format,
 	return new_tuple;
 }
 
+static inline void
+tuple_verify_data(const char **begin, const char *end, uint32_t field_count)
+{
+	while (*begin < end && field_count-- > 0) {
+		size_t len = load_varint32(begin);
+		*begin += len;
+	}
+	if (field_count > 0 || *begin != end)
+		tnt_raise(IllegalParams, "during verifying tuple: incorrect tuple format");
+}
+
 struct tuple *
 tuple_new(struct tuple_format *format, uint32_t field_count,
 	  const char **data, const char *end)
 {
 	size_t tuple_len = end - *data;
 
-	uint32_t test_field_count = field_count;
-	if (tuple_len != tuple_range_size(data, end, &test_field_count))
-		tnt_raise(IllegalParams, "tuple_new(): incorrect tuple format");
-	if (test_field_count > 0)
-		tnt_raise(IllegalParams, "tuple_new(): incorrect tuple format");
+	tuple_verify_data(data, end, field_count);
 
 	struct tuple *new_tuple = tuple_alloc(format, tuple_len);
 	new_tuple->field_count = field_count;
diff --git a/src/box/tuple.h b/src/box/tuple.h
index 591f5dcb8e..0d298a7597 100644
--- a/src/box/tuple.h
+++ b/src/box/tuple.h
@@ -306,17 +306,6 @@ static inline size_t tuple_len(struct tuple *tuple)
 		sizeof(tuple->field_count);
 }
 
-static inline size_t
-tuple_range_size(const char **begin, const char *end, uint32_t *count)
-{
-	const char *start = *begin;
-	while (*begin < end && (*count)-- > 0) {
-		size_t len = load_varint32(begin);
-		*begin += len;
-	}
-	return *begin - start;
-}
-
 void tuple_free(struct tuple *tuple);
 
 /**
diff --git a/test/box/lua.result b/test/box/lua.result
index ad7b0bc3da..738f72ec21 100644
--- a/test/box/lua.result
+++ b/test/box/lua.result
@@ -239,7 +239,7 @@ call f1()
 An error occurred: ER_PROC_RET, 'Return type 'function' is not supported in the binary protocol'
 lua box.process(13, box.pack('iiippp', 0, 0, 99999, 99999, 'wrong', 'tuple'))
 ---
-error: 'Illegal parameters, tuple_new(): incorrect tuple format'
+error: 'Illegal parameters, during verifying tuple: incorrect tuple format'
 ...
 insert into t0 values (1, 'test box delete')
 Insert OK, 1 row affected
-- 
GitLab