From dffd1679ba97e5e8145575f0f11cb87553670c6f Mon Sep 17 00:00:00 2001 From: Rucha Deodhar Date: Thu, 2 Mar 2023 19:09:45 +0530 Subject: MDEV-30703: JSON_SCHEMA_VALID : Enum array must have at least one value Analysis: Current implementation does not check the number of elements in the enum array and whether they are unique or not. Fix: Add a counter that counts number of elements and before inserting the element in the enum hash check whether it exists. --- mysql-test/main/func_json.result | 15 +++++++++++++++ mysql-test/main/func_json.test | 20 ++++++++++++++++++++ 2 files changed, 35 insertions(+) (limited to 'mysql-test/main') diff --git a/mysql-test/main/func_json.result b/mysql-test/main/func_json.result index 8b4c98ae9fd..5fee9ce4c32 100644 --- a/mysql-test/main/func_json.result +++ b/mysql-test/main/func_json.result @@ -4590,4 +4590,19 @@ JSON_SCHEMA_VALID(@invalid_schema, '{"number1":3, "obj2":{"key1":3}}') NULL Warnings: Warning 4038 Syntax error in JSON text in argument 1 to function 'json_schema_valid' at position 45 +# +# MDEV-30703: JSON_SCHEMA_VALID : Enum array must have at least one value +# +SET @schema = '{ + "type":"array", + "enum": [] + }'; +SELECT JSON_SCHEMA_VALID(@schema, '2'); +ERROR HY000: Invalid value for keyword enum +SET @schema = '{ + "type":"number", + "enum": [2, 2] + }'; +SELECT JSON_SCHEMA_VALID(@schema, '2'); +ERROR HY000: Invalid value for keyword enum # End of 11.1 test diff --git a/mysql-test/main/func_json.test b/mysql-test/main/func_json.test index c417a8ea4f8..a1e52a0494c 100644 --- a/mysql-test/main/func_json.test +++ b/mysql-test/main/func_json.test @@ -3357,6 +3357,7 @@ SET @schema_reference= '{"$defs": "http://example.com/custom-email-validator.jso SELECT JSON_SCHEMA_VALID(@schema_reference, '{}'); + --echo # --echo # MDEV-30795: JSON_SCHEMA_VALID bugs mentioned in comment --echo # @@ -3474,4 +3475,23 @@ SET @invalid_schema= '{"type":"object" }'; SELECT JSON_SCHEMA_VALID(@invalid_schema, '{"number1":3, "obj2":{"key1":3}}'); +--echo # +--echo # MDEV-30703: JSON_SCHEMA_VALID : Enum array must have at least one value +--echo # + +SET @schema = '{ + "type":"array", + "enum": [] + }'; +--error ER_JSON_INVALID_VALUE_FOR_KEYWORD +SELECT JSON_SCHEMA_VALID(@schema, '2'); + +SET @schema = '{ + "type":"number", + "enum": [2, 2] + }'; +--error ER_JSON_INVALID_VALUE_FOR_KEYWORD +SELECT JSON_SCHEMA_VALID(@schema, '2'); + + --echo # End of 11.1 test -- cgit v1.2.1