From ee41fa38fc3b393e0e7b73bed098274248b8492d Mon Sep 17 00:00:00 2001 From: Rucha Deodhar Date: Tue, 4 Apr 2023 13:35:02 +0530 Subject: MDEV-30995: JSON_SCHEMA_VALID is not validating case sensitive when using regex Analysis: When initializing Regexp_processor_pcre object, we set the PCRE2_CASELESS flag which is responsible for case insensitive comparison. Fix: Unset the flag after initializing. --- mysql-test/main/func_json.result | 39 +++++++++++++++++++++++++++++++++++++++ mysql-test/main/func_json.test | 29 +++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) (limited to 'mysql-test/main') diff --git a/mysql-test/main/func_json.result b/mysql-test/main/func_json.result index dddfcf8f1cd..29939d69e83 100644 --- a/mysql-test/main/func_json.result +++ b/mysql-test/main/func_json.result @@ -4496,4 +4496,43 @@ ERROR HY000: Invalid value for keyword minContains SET @schema_required='{"type":"object","required":[1,"str1", "str1"]}'; SELECT JSON_SCHEMA_VALID(@schema_required,'{"num1":1, "str1":"abc", "arr1":[1,2,3]}'); ERROR HY000: Invalid value for keyword required +# +# MDEV-30995: JSON_SCHEMA_VALID is not validating case sensitive when using regex +# +SET @schema_pattern='{ + "type": "string", + "pattern": "[A-Z]" + }'; +SELECT JSON_SCHEMA_VALID(@schema_pattern, '"a"'); +JSON_SCHEMA_VALID(@schema_pattern, '"a"') +0 +SET @schema_property_names='{ + "PropertyNames":{ + "pattern": "^I_" + } + }'; +SELECT JSON_SCHEMA_VALID(@schema_property_names, '{"I_num":4}'); +JSON_SCHEMA_VALID(@schema_property_names, '{"I_num":4}') +1 +SELECT JSON_SCHEMA_VALID(@schema_property_names, '{"i_num":4}'); +JSON_SCHEMA_VALID(@schema_property_names, '{"i_num":4}') +0 +SET @schema_pattern_properties= '{ + "patternProperties": { + "^I_": {"type":"number", "maximum":100}, + "^S_" : {"type":"string", "maxLength":4} + } + }'; +SELECT JSON_SCHEMA_VALID(@schema_pattern_properties, '{"I_": 50}'); +JSON_SCHEMA_VALID(@schema_pattern_properties, '{"I_": 50}') +1 +SELECT JSON_SCHEMA_VALID(@schema_pattern_properties, '{"I_": 150}'); +JSON_SCHEMA_VALID(@schema_pattern_properties, '{"I_": 150}') +0 +SELECT JSON_SCHEMA_VALID(@schema_pattern_properties, '{"i_": 50}'); +JSON_SCHEMA_VALID(@schema_pattern_properties, '{"i_": 50}') +1 +SELECT JSON_SCHEMA_VALID(@schema_pattern_properties, '{"i_": 150}'); +JSON_SCHEMA_VALID(@schema_pattern_properties, '{"i_": 150}') +1 # End of 11.1 test diff --git a/mysql-test/main/func_json.test b/mysql-test/main/func_json.test index 706a01d4528..5517dcfa6c8 100644 --- a/mysql-test/main/func_json.test +++ b/mysql-test/main/func_json.test @@ -3399,4 +3399,33 @@ SET @schema_required='{"type":"object","required":[1,"str1", "str1"]}'; SELECT JSON_SCHEMA_VALID(@schema_required,'{"num1":1, "str1":"abc", "arr1":[1,2,3]}'); +--echo # +--echo # MDEV-30995: JSON_SCHEMA_VALID is not validating case sensitive when using regex +--echo # + +SET @schema_pattern='{ + "type": "string", + "pattern": "[A-Z]" + }'; +SELECT JSON_SCHEMA_VALID(@schema_pattern, '"a"'); + +SET @schema_property_names='{ + "PropertyNames":{ + "pattern": "^I_" + } + }'; +SELECT JSON_SCHEMA_VALID(@schema_property_names, '{"I_num":4}'); +SELECT JSON_SCHEMA_VALID(@schema_property_names, '{"i_num":4}'); + +SET @schema_pattern_properties= '{ + "patternProperties": { + "^I_": {"type":"number", "maximum":100}, + "^S_" : {"type":"string", "maxLength":4} + } + }'; +SELECT JSON_SCHEMA_VALID(@schema_pattern_properties, '{"I_": 50}'); +SELECT JSON_SCHEMA_VALID(@schema_pattern_properties, '{"I_": 150}'); +SELECT JSON_SCHEMA_VALID(@schema_pattern_properties, '{"i_": 50}'); +SELECT JSON_SCHEMA_VALID(@schema_pattern_properties, '{"i_": 150}'); + --echo # End of 11.1 test -- cgit v1.2.1