Skip to content

Commit 564d8f6

Browse files
authored
Fix for incorrect validation failure for %-encoded '[' and ']' characters. (#1051)
1 parent 7728325 commit 564d8f6

File tree

4 files changed

+30
-2
lines changed

4 files changed

+30
-2
lines changed

src/main/java/com/networknt/schema/format/IriFormat.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ protected boolean validate(URI uri) {
1717
}
1818
}
1919

20-
String query = uri.getQuery();
20+
String query = uri.getRawQuery();
2121
if (query != null) {
2222
// [ and ] must be percent encoded
2323
if (query.indexOf('[') != -1 || query.indexOf(']') != -1) {

src/main/java/com/networknt/schema/format/IriReferenceFormat.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ protected boolean validate(URI uri) {
1414
return false;
1515
}
1616
}
17-
String query = uri.getQuery();
17+
String query = uri.getRawQuery();
1818
if (query != null) {
1919
// [ and ] must be percent encoded
2020
if (query.indexOf('[') != -1 || query.indexOf(']') != -1) {

src/test/java/com/networknt/schema/format/IriFormatTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,20 @@ void queryWithBracketsShouldFail() {
5656
InputFormat.JSON);
5757
assertFalse(messages.isEmpty());
5858
}
59+
60+
@Test
61+
void queryWithEncodedBracketsShouldPass() {
62+
String schemaData = "{\r\n"
63+
+ " \"format\": \"iri\"\r\n"
64+
+ "}";
65+
66+
SchemaValidatorsConfig config = new SchemaValidatorsConfig();
67+
config.setFormatAssertionsEnabled(true);
68+
JsonSchema schema = JsonSchemaFactory.getInstance(VersionFlag.V202012).getSchema(schemaData, config);
69+
Set<ValidationMessage> messages = schema.validate("\"https://test.com/assets/product.pdf?filter%5Btest%5D=1\"",
70+
InputFormat.JSON);
71+
assertTrue(messages.isEmpty());
72+
}
5973

6074
@Test
6175
void iriShouldPass() {

src/test/java/com/networknt/schema/format/IriReferenceFormatTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,20 @@ void queryWithBracketsShouldFail() {
5757
assertFalse(messages.isEmpty());
5858
}
5959

60+
@Test
61+
void queryWithEncodedBracketsShouldPass() {
62+
String schemaData = "{\r\n"
63+
+ " \"format\": \"iri-reference\"\r\n"
64+
+ "}";
65+
66+
SchemaValidatorsConfig config = new SchemaValidatorsConfig();
67+
config.setFormatAssertionsEnabled(true);
68+
JsonSchema schema = JsonSchemaFactory.getInstance(VersionFlag.V202012).getSchema(schemaData, config);
69+
Set<ValidationMessage> messages = schema.validate("\"https://test.com/assets/product.pdf?filter%5Btest%5D=1\"",
70+
InputFormat.JSON);
71+
assertTrue(messages.isEmpty());
72+
}
73+
6074
@Test
6175
void iriShouldPass() {
6276
String schemaData = "{\r\n"

0 commit comments

Comments
 (0)