From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from localhost (localhost [127.0.0.1]) by turing.freelists.org (Avenir Technologies Mail Multiplex) with ESMTP id 6DBCF218BB for ; Wed, 24 Jul 2019 07:42:52 -0400 (EDT) Received: from turing.freelists.org ([127.0.0.1]) by localhost (turing.freelists.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id jZrJ_27Zto3c for ; Wed, 24 Jul 2019 07:42:52 -0400 (EDT) Received: from smtpng1.m.smailru.net (smtpng1.m.smailru.net [94.100.181.251]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by turing.freelists.org (Avenir Technologies Mail Multiplex) with ESMTPS id 15A2721CC3 for ; Wed, 24 Jul 2019 07:42:52 -0400 (EDT) From: Nikita Pettik Subject: [tarantool-patches] [PATCH 4/5] sql: make built-ins raise errors for varbin args Date: Wed, 24 Jul 2019 14:42:46 +0300 Message-Id: <61adf9b0d2ce82a927f318c386dd0a004eb3ca45.1563967510.git.korablev@tarantool.org> In-Reply-To: References: In-Reply-To: References: Sender: tarantool-patches-bounce@freelists.org Errors-to: tarantool-patches-bounce@freelists.org Reply-To: tarantool-patches@freelists.org List-Help: List-Unsubscribe: List-software: Ecartis version 1.0.0 List-Id: tarantool-patches List-Subscribe: List-Owner: List-post: List-Archive: To: tarantool-patches@freelists.org Cc: v.shpilevoy@tarantool.org, Nikita Pettik Since values of type 'varbinary' can't be cast to any other type, let's patch built-in functions which are not assumed to accept arguments of this type to raise an error in case argument turn out to be of type varbinary. Part of #4206 --- src/box/sql/func.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/box/sql/func.c b/src/box/sql/func.c index 4ec591eee..5fd1496fd 100644 --- a/src/box/sql/func.c +++ b/src/box/sql/func.c @@ -196,9 +196,10 @@ absFunc(sql_context * context, int argc, sql_value ** argv) sql_result_null(context); break; } - case MP_BOOL: { + case MP_BOOL: + case MP_BIN: { diag_set(ClientError, ER_INCONSISTENT_TYPES, "number", - "boolean"); + mem_type_to_str(argv[0])); context->is_aborted = true; return; } @@ -506,6 +507,12 @@ roundFunc(sql_context * context, int argc, sql_value ** argv) } if (sql_value_is_null(argv[0])) return; + if (sql_value_type(argv[0]) == MP_BIN) { + diag_set(ClientError, ER_SQL_TYPE_MISMATCH, + sql_value_text(argv[0]), "numeric"); + context->is_aborted = true; + return; + } r = sql_value_double(argv[0]); /* If Y==0 and X will fit in a 64-bit int, * handle the rounding directly, @@ -560,6 +567,13 @@ case_type##ICUFunc(sql_context *context, int argc, sql_value **argv) \ const char *z2; \ int n; \ UNUSED_PARAMETER(argc); \ + int arg_type = sql_value_type(argv[0]); \ + if (arg_type == MP_BIN) { \ + diag_set(ClientError, ER_INCONSISTENT_TYPES, "TEXT", \ + "VARBINARY"); \ + context->is_aborted = true; \ + return; \ + } \ z2 = (char *)sql_value_text(argv[0]); \ n = sql_value_bytes(argv[0]); \ /* \ @@ -646,6 +660,12 @@ randomBlob(sql_context * context, int argc, sql_value ** argv) unsigned char *p; assert(argc == 1); UNUSED_PARAMETER(argc); + if (sql_value_type(argv[0]) == MP_BIN) { + diag_set(ClientError, ER_SQL_TYPE_MISMATCH, + sql_value_text(argv[0]), "numeric"); + context->is_aborted = true; + return; + } n = sql_value_int(argv[0]); if (n < 1) return; -- 2.15.1