Skip to content

Commit

Permalink
MDEV-30977: Additional key values are not validating properly when using
Browse files Browse the repository at this point in the history
unevaluatedProperties with properties declared in subschemas

Analysis:
When a key fails to validate for "properties" when "properties" is being
treated as alternate schema, it needs to fall back on alternate schema
for "properites" itself ("unevaluatedProperties" in context of the bug).
But that doesn't happen and we end up returning false (=validated)
Fix:
When "properties" fails to validate as an alternate schema, fall back on
alternate schema for "properties" itself.
  • Loading branch information
mariadb-RuchaDeodhar committed Apr 26, 2023
1 parent ee41fa3 commit 1c25b5c
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 0 deletions.
22 changes: 22 additions & 0 deletions mysql-test/main/func_json.result
Expand Up @@ -4497,6 +4497,28 @@ 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-30977: Additional key values are not validating properly when using
# unevaluatedProperties with properties declared in subschemas
#
SET @unevaluatedProperties_schema= '{
"allOf": [
{
"type": "object",
"properties": {
"name": { "type": "string" }
}
}
],
"properties": {
"type": { "enum": ["residential", "business"] }
},
"required": ["type"],
"unevaluatedProperties": false
}';
SELECT JSON_SCHEMA_VALID(@unevaluatedProperties_schema, '{"name": "joe", "type": "business", "dummy" : "hello" }');
JSON_SCHEMA_VALID(@unevaluatedProperties_schema, '{"name": "joe", "type": "business", "dummy" : "hello" }')
0
#
# MDEV-30995: JSON_SCHEMA_VALID is not validating case sensitive when using regex
#
SET @schema_pattern='{
Expand Down
21 changes: 21 additions & 0 deletions mysql-test/main/func_json.test
Expand Up @@ -3398,6 +3398,27 @@ SET @schema_required='{"type":"object","required":[1,"str1", "str1"]}';
--error ER_JSON_INVALID_VALUE_FOR_KEYWORD
SELECT JSON_SCHEMA_VALID(@schema_required,'{"num1":1, "str1":"abc", "arr1":[1,2,3]}');

--echo #
--echo # MDEV-30977: Additional key values are not validating properly when using
--echo # unevaluatedProperties with properties declared in subschemas
--echo #

SET @unevaluatedProperties_schema= '{
"allOf": [
{
"type": "object",
"properties": {
"name": { "type": "string" }
}
}
],
"properties": {
"type": { "enum": ["residential", "business"] }
},
"required": ["type"],
"unevaluatedProperties": false
}';
SELECT JSON_SCHEMA_VALID(@unevaluatedProperties_schema, '{"name": "joe", "type": "business", "dummy" : "hello" }');

--echo #
--echo # MDEV-30995: JSON_SCHEMA_VALID is not validating case sensitive when using regex
Expand Down
9 changes: 9 additions & 0 deletions sql/json_schema.cc
Expand Up @@ -1883,6 +1883,13 @@ bool Json_schema_properties::validate_as_alternate(const json_engine_t *je,
return true;
}
}
else
{
if (alternate_schema && alternate_schema->validate_as_alternate(je, k_start, k_end))
{
return true;
}
}
return false;
}

Expand All @@ -1892,6 +1899,8 @@ Json_schema_additional_and_unevaluated::
const uchar* k_start,
const uchar* k_end)
{
if (!allowed)
return true;
return validate_schema_items(je, &schema_list);
}

Expand Down

0 comments on commit 1c25b5c

Please sign in to comment.