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