Skip to content

Commit 07ba71c

Browse files
committed
bugfix: in case of a schema with additionalProperties=false and a subject with multiple additional properties, only the first additional property was reported
1 parent 2e06b51 commit 07ba71c

File tree

2 files changed

+13
-3
lines changed

2 files changed

+13
-3
lines changed

core/src/main/java/org/everit/json/schema/ObjectSchema.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -276,11 +276,9 @@ public boolean requiresObject() {
276276
private List<ValidationException> testAdditionalProperties(final JSONObject subject) {
277277
if (!additionalProperties) {
278278
return getAdditionalProperties(subject)
279-
.findFirst()
280279
.map(unneeded -> String.format("extraneous key [%s] is not permitted", unneeded))
281280
.map(msg -> new ValidationException(this, msg))
282-
.map(exc -> Arrays.asList(exc))
283-
.orElse(Collections.emptyList());
281+
.collect(Collectors.toList());
284282
} else if (schemaOfAdditionalProperties != null) {
285283
List<String> additionalPropNames = getAdditionalProperties(subject)
286284
.collect(Collectors.toList());

core/src/test/java/org/everit/json/schema/ObjectSchemaTest.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,18 @@ public void minPropertiesFailure() {
5353
TestSupport.expectFailure(subject, "#", OBJECTS.get("minPropertiesFailure"));
5454
}
5555

56+
@Test
57+
public void multipleAdditionalProperties() {
58+
ObjectSchema subject = ObjectSchema.builder().additionalProperties(false).build();
59+
try {
60+
subject.validate(new JSONObject("{\"a\":true,\"b\":true}"));
61+
Assert.fail("did not throw exception for multiple additional properties");
62+
} catch (ValidationException e) {
63+
Assert.assertEquals("#: 2 schema violations found", e.getMessage());
64+
Assert.assertEquals(2, e.getCausingExceptions().size());
65+
}
66+
}
67+
5668
@Test
5769
public void multipleSchemaDepViolation() {
5870
Schema billingAddressSchema = new StringSchema();

0 commit comments

Comments
 (0)