Skip to content

Commit 69e1df0

Browse files
committed
tweaking URIFormatValidator to forbid protocol-relative URIs in DRAFT_7 mode
1 parent db09ffd commit 69e1df0

File tree

3 files changed

+19
-1
lines changed

3 files changed

+19
-1
lines changed

core/src/main/java/org/everit/json/schema/internal/URIFormatValidator.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,21 @@
1111
*/
1212
public class URIFormatValidator implements FormatValidator {
1313

14+
private final boolean protocolRelativeURIPermitted;
15+
16+
public URIFormatValidator() {
17+
this(true);
18+
}
19+
20+
public URIFormatValidator(boolean protocolRelativeURIPermitted) {
21+
this.protocolRelativeURIPermitted = protocolRelativeURIPermitted;
22+
}
23+
1424
@Override
1525
public Optional<String> validate(final String subject) {
1626
try {
1727
URI uri = new URI(subject);
18-
if (hasProtocol(uri) || isProtocolRelativeURI(subject)) {
28+
if (hasProtocol(uri) || (protocolRelativeURIPermitted && isProtocolRelativeURI(subject))) {
1929
return Optional.empty();
2030
} else {
2131
throw new URISyntaxException(subject, "no protocol and not protocol-relative");

core/src/main/java/org/everit/json/schema/loader/SpecificationVersion.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ private static final List<String> keywords(String... keywords) {
158158
static {
159159
Map<String, FormatValidator> formatValidators = new HashMap<>(V6_VALIDATORS);
160160
formatValidators.put("date", new DateFormatValidator());
161+
formatValidators.put("uri", new URIFormatValidator(false));
161162
formatValidators.put("time", new TimeFormatValidator());
162163
formatValidators.put("regex", new RegexFormatValidator());
163164
formatValidators.put("relative-json-pointer", new RelativeJsonPointerFormatValidator());

core/src/test/java/org/everit/json/schema/internal/DefaultFormatValidatorTest.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,12 @@ public void relativeURIRefFailsInDraft6() {
274274
public void relativeURIRefSucceedsInDraft4() {
275275
assertSuccess("abc", new URIV4FormatValidator());
276276
}
277+
278+
@Test
279+
public void protocolRelativeURIsCanBeDisabled() {
280+
assertFailure("//example.com", new URIFormatValidator(false), "[//example.com] is not a valid URI");
281+
}
282+
277283
//
278284
// @Test
279285
// public void protocolRelativeUriSuccess() {
@@ -299,4 +305,5 @@ public void regexSuccess() {
299305
public void regexFailure() {
300306
assertFailure("^(abc]", new RegexFormatValidator(), "[^(abc]] is not a valid regular expression");
301307
}
308+
302309
}

0 commit comments

Comments
 (0)