diff --git a/src/main/java/com/networknt/schema/format/IriFormat.java b/src/main/java/com/networknt/schema/format/IriFormat.java index 150741ddf..7d74429fe 100644 --- a/src/main/java/com/networknt/schema/format/IriFormat.java +++ b/src/main/java/com/networknt/schema/format/IriFormat.java @@ -17,7 +17,7 @@ protected boolean validate(URI uri) { } } - String query = uri.getQuery(); + String query = uri.getRawQuery(); if (query != null) { // [ and ] must be percent encoded if (query.indexOf('[') != -1 || query.indexOf(']') != -1) { diff --git a/src/main/java/com/networknt/schema/format/IriReferenceFormat.java b/src/main/java/com/networknt/schema/format/IriReferenceFormat.java index 45f8bd93b..aa0a0d0c9 100644 --- a/src/main/java/com/networknt/schema/format/IriReferenceFormat.java +++ b/src/main/java/com/networknt/schema/format/IriReferenceFormat.java @@ -14,7 +14,7 @@ protected boolean validate(URI uri) { return false; } } - String query = uri.getQuery(); + String query = uri.getRawQuery(); if (query != null) { // [ and ] must be percent encoded if (query.indexOf('[') != -1 || query.indexOf(']') != -1) { diff --git a/src/test/java/com/networknt/schema/format/IriFormatTest.java b/src/test/java/com/networknt/schema/format/IriFormatTest.java index d8655bfc1..112f726f3 100644 --- a/src/test/java/com/networknt/schema/format/IriFormatTest.java +++ b/src/test/java/com/networknt/schema/format/IriFormatTest.java @@ -56,6 +56,20 @@ void queryWithBracketsShouldFail() { InputFormat.JSON); assertFalse(messages.isEmpty()); } + + @Test + void queryWithEncodedBracketsShouldPass() { + String schemaData = "{\r\n" + + " \"format\": \"iri\"\r\n" + + "}"; + + SchemaValidatorsConfig config = new SchemaValidatorsConfig(); + config.setFormatAssertionsEnabled(true); + JsonSchema schema = JsonSchemaFactory.getInstance(VersionFlag.V202012).getSchema(schemaData, config); + Set messages = schema.validate("\"https://test.com/assets/product.pdf?filter%5Btest%5D=1\"", + InputFormat.JSON); + assertTrue(messages.isEmpty()); + } @Test void iriShouldPass() { diff --git a/src/test/java/com/networknt/schema/format/IriReferenceFormatTest.java b/src/test/java/com/networknt/schema/format/IriReferenceFormatTest.java index 4bbaedaa9..eba077115 100644 --- a/src/test/java/com/networknt/schema/format/IriReferenceFormatTest.java +++ b/src/test/java/com/networknt/schema/format/IriReferenceFormatTest.java @@ -57,6 +57,20 @@ void queryWithBracketsShouldFail() { assertFalse(messages.isEmpty()); } + @Test + void queryWithEncodedBracketsShouldPass() { + String schemaData = "{\r\n" + + " \"format\": \"iri-reference\"\r\n" + + "}"; + + SchemaValidatorsConfig config = new SchemaValidatorsConfig(); + config.setFormatAssertionsEnabled(true); + JsonSchema schema = JsonSchemaFactory.getInstance(VersionFlag.V202012).getSchema(schemaData, config); + Set messages = schema.validate("\"https://test.com/assets/product.pdf?filter%5Btest%5D=1\"", + InputFormat.JSON); + assertTrue(messages.isEmpty()); + } + @Test void iriShouldPass() { String schemaData = "{\r\n"