diff options
author | Weijun Huang <huangweijun1001@gmail.com> | 2023-02-12 16:40:40 +0100 |
---|---|---|
committer | Daniel Black <daniel@mariadb.org> | 2023-02-14 12:03:28 +1100 |
commit | a80eb9832e7b86bf2697788926505cf3fab57101 (patch) | |
tree | 56eb98dd9826927226d12f65bf7c4478b4808169 | |
parent | cacea31687c098c0348deb1e433f4baddd817419 (diff) | |
download | mariadb-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.result | 7 | ||||
-rw-r--r-- | mysql-test/main/func_json.test | 9 | ||||
-rw-r--r-- | sql/item_jsonfunc.h | 5 |
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())); |