summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWeijun Huang <huangweijun1001@gmail.com>2023-02-12 16:40:40 +0100
committerDaniel Black <daniel@mariadb.org>2023-02-14 12:03:28 +1100
commita80eb9832e7b86bf2697788926505cf3fab57101 (patch)
tree56eb98dd9826927226d12f65bf7c4478b4808169
parentcacea31687c098c0348deb1e433f4baddd817419 (diff)
downloadmariadb-git-a80eb9832e7b86bf2697788926505cf3fab57101.tar.gz
MDEV-24538: JSON_LENGTH does not return error upon wrong number of parameters
-rw-r--r--mysql-test/main/func_json.result7
-rw-r--r--mysql-test/main/func_json.test9
-rw-r--r--sql/item_jsonfunc.h5
3 files changed, 21 insertions, 0 deletions
diff --git a/mysql-test/main/func_json.result b/mysql-test/main/func_json.result
index 1e59256b517..415e367f455 100644
--- a/mysql-test/main/func_json.result
+++ b/mysql-test/main/func_json.result
@@ -1289,5 +1289,12 @@ JSON_LOOSE(JSON_EXTRACT(a, '$**.analyzing_range_alternatives'))
[{"range_scan_alternatives": [{"index": "a_b", "ranges": ["2 <= a <= 2 AND 4 <= b <= 4", "123"], "rowid_ordered": true, "using_mrr": false, "index_only": true, "rows": 1, "cost": 1.1752, "chosen": true}], "analyzing_roworder_intersect": {"cause": "too few roworder scans"}, "analyzing_index_merge_union": [], "test_one_line_array": ["123"]}]
drop table t200;
#
+# MDEV-24538: JSON_LENGTH does not return error upon wrong number of parameters
+#
+SELECT JSON_LENGTH('{"a":"b"}','$','$', 'foo');
+ERROR 42000: Incorrect parameter count in the call to native function 'json_length'
+SELECT JSON_LENGTH();
+ERROR 42000: Incorrect parameter count in the call to native function 'JSON_LENGTH'
+#
# End of 10.4 tests
#
diff --git a/mysql-test/main/func_json.test b/mysql-test/main/func_json.test
index b3e19f76972..56d90e93936 100644
--- a/mysql-test/main/func_json.test
+++ b/mysql-test/main/func_json.test
@@ -665,6 +665,7 @@ SELECT 1 + JSON_VALUE('{"nulltest": null}', '$.nulltest');
SELECT NULL;
SELECT JSON_EXTRACT('{"a":null, "b":10, "c":"null"}', '$.a');
+
--echo #
--echo # End of 10.3 tests
--echo #
@@ -817,5 +818,13 @@ select JSON_LOOSE(JSON_EXTRACT(a, '$**.analyzing_range_alternatives')) from t200
drop table t200;
--echo #
+--echo # MDEV-24538: JSON_LENGTH does not return error upon wrong number of parameters
+--echo #
+--error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
+SELECT JSON_LENGTH('{"a":"b"}','$','$', 'foo');
+--error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
+SELECT JSON_LENGTH();
+
+--echo #
--echo # End of 10.4 tests
--echo #
diff --git a/sql/item_jsonfunc.h b/sql/item_jsonfunc.h
index 798c5d502db..b44207ec73f 100644
--- a/sql/item_jsonfunc.h
+++ b/sql/item_jsonfunc.h
@@ -310,6 +310,11 @@ class Item_func_json_length: public Item_long_func
{
bool check_arguments() const
{
+ if (arg_count == 0 || arg_count > 2)
+ {
+ my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), func_name());
+ return true;
+ }
return args[0]->check_type_can_return_text(func_name()) ||
(arg_count > 1 &&
args[1]->check_type_general_purpose_string(func_name()));