Skip to content

Commit bc01ec4

Browse files
authored
Fix uri and uri-reference incorrect validation failure (#1052)
1 parent 564d8f6 commit bc01ec4

File tree

4 files changed

+31
-4
lines changed

4 files changed

+31
-4
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ protected boolean validate(URI uri) {
1313
// Java URI accepts non ASCII characters and this is not a valid in RFC3986
1414
result = uri.toString().codePoints().allMatch(ch -> ch < 0x7F);
1515
if (result) {
16-
String query = uri.getQuery();
16+
String query = uri.getRawQuery();
1717
if (query != null) {
1818
// [ and ] must be percent encoded
1919
if (query.indexOf('[') != -1 || query.indexOf(']') != -1) {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ protected boolean validate(URI uri) {
1111
// Java URI accepts non ASCII characters and this is not a valid in RFC3986
1212
boolean result = uri.toString().codePoints().allMatch(ch -> ch < 0x7F);
1313
if (result) {
14-
String query = uri.getQuery();
14+
String query = uri.getRawQuery();
1515
if (query != null) {
1616
// [ and ] must be percent encoded
1717
if (query.indexOf('[') != -1 || query.indexOf(']') != -1) {

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

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,21 @@ void queryWithBracketsShouldFail() {
5656
InputFormat.JSON);
5757
assertFalse(messages.isEmpty());
5858
}
59-
59+
60+
@Test
61+
void queryWithEncodedBracketsShouldPass() {
62+
String schemaData = "{\r\n"
63+
+ " \"format\": \"uri\"\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 iriShouldFail() {
6276
String schemaData = "{\r\n"
@@ -70,5 +84,4 @@ void iriShouldFail() {
7084
InputFormat.JSON);
7185
assertFalse(messages.isEmpty());
7286
}
73-
7487
}

src/test/java/com/networknt/schema/format/UriReferenceFormatTest.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\": \"uri-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 iriShouldFail() {
6276
String schemaData = "{\r\n"

0 commit comments

Comments
 (0)