[Tarantool-patches] [PATCH v5 16/17] sql: check args of unicode()

imeevma at tarantool.org imeevma at tarantool.org
Tue Jul 14 18:49:55 MSK 2020


After this patch, the argument types of the unicode() function will be
checked properly.

Part of #4159
---
 src/box/sql/func.c          |  6 ++++-
 test/sql-tap/func5.test.lua | 51 ++++++++++++++++++++++++++++++++++++-
 2 files changed, 55 insertions(+), 2 deletions(-)

diff --git a/src/box/sql/func.c b/src/box/sql/func.c
index a22c50c79..00ba7c9c2 100644
--- a/src/box/sql/func.c
+++ b/src/box/sql/func.c
@@ -1389,6 +1389,10 @@ quoteFunc(sql_context * context, int argc, sql_value ** argv)
 static void
 unicodeFunc(sql_context * context, int argc, sql_value ** argv)
 {
+	enum mp_type mp_type = sql_value_type(argv[0]);
+	if (mp_type == MP_NIL)
+		return sql_result_null(context);
+	assert(mp_type == MP_STR);
 	const unsigned char *z = sql_value_text(argv[0]);
 	(void)argc;
 	if (z && z[0])
@@ -2915,7 +2919,7 @@ static struct {
 	}, {
 	 .name = "UNICODE",
 	 .param_count = 1,
-	 .first_arg = FIELD_TYPE_ANY,
+	 .first_arg = FIELD_TYPE_STRING,
 	 .args = FIELD_TYPE_ANY,
 	 .is_blob_like_str = false,
 	 .returns = FIELD_TYPE_STRING,
diff --git a/test/sql-tap/func5.test.lua b/test/sql-tap/func5.test.lua
index 78b98f2b1..77105baf2 100755
--- a/test/sql-tap/func5.test.lua
+++ b/test/sql-tap/func5.test.lua
@@ -1,6 +1,6 @@
 #!/usr/bin/env tarantool
 test = require("sqltester")
-test:plan(141)
+test:plan(148)
 
 --!./tcltestrunner.lua
 -- 2010 August 27
@@ -1130,4 +1130,53 @@ test:do_catchsql_test(
         1, "Type mismatch: can not convert varbinary to integer"
     })
 
+test:do_execsql_test(
+    "func-5-6.18.1", [[
+        SELECT unicode(NULL);
+    ]],{
+        ""
+    })
+
+test:do_catchsql_test(
+    "func-5-6.18.2", [[
+        SELECT unicode(123);
+    ]], {
+        1, "Type mismatch: can not convert 123 to string"
+    })
+
+test:do_catchsql_test(
+    "func-5-6.18.3", [[
+        SELECT unicode(-123);
+    ]], {
+        1, "Type mismatch: can not convert -123 to string"
+    })
+
+test:do_catchsql_test(
+    "func-5-6.18.4", [[
+        SELECT unicode(-5.5);
+    ]], {
+        1, "Type mismatch: can not convert -5.5 to string"
+    })
+
+test:do_execsql_test(
+    "func-5-6.18.5", [[
+        SELECT unicode('-123');
+    ]], {
+        45
+    })
+
+test:do_catchsql_test(
+    "func-5-6.18.6", [[
+        SELECT unicode(false);
+    ]], {
+        1, "Type mismatch: can not convert FALSE to string"
+    })
+
+test:do_catchsql_test(
+    "func-5-6.18.7", [[
+        SELECT unicode(X'3334');
+    ]], {
+        1, "Type mismatch: can not convert varbinary to string"
+    })
+
 test:finish_test()
-- 
2.25.1



More information about the Tarantool-patches mailing list