Skip to content

Commit dffefeb

Browse files
author
Bence Erős
committed
throwing SchemaException if multipleOf is 0 - fixes #426
1 parent f99034e commit dffefeb

File tree

3 files changed

+18
-1
lines changed

3 files changed

+18
-1
lines changed

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import static org.everit.json.schema.loader.SpecificationVersion.DRAFT_4;
1010
import static org.everit.json.schema.loader.SpecificationVersion.DRAFT_7;
1111

12+
import java.math.BigDecimal;
1213
import java.util.ArrayList;
1314
import java.util.Collection;
1415
import java.util.HashSet;
@@ -148,7 +149,12 @@ NumberSchema.Builder buildNumberSchema() {
148149
NumberSchema.Builder builder = NumberSchema.builder();
149150
maybe("minimum").map(JsonValue::requireNumber).ifPresent(builder::minimum);
150151
maybe("maximum").map(JsonValue::requireNumber).ifPresent(builder::maximum);
151-
maybe("multipleOf").map(JsonValue::requireNumber).ifPresent(builder::multipleOf);
152+
maybe("multipleOf").map(JsonValue::requireNumber).ifPresent(multipleOf -> {
153+
if (BigDecimal.ZERO.compareTo(BigDecimal.valueOf(multipleOf.doubleValue())) == 0) {
154+
throw new SchemaException(schemaJson.ls.locationOfCurrentObj(), "multipleOf should not be 0");
155+
}
156+
builder.multipleOf(multipleOf);
157+
});
152158
maybe("exclusiveMinimum").ifPresent(exclMin -> exclusiveLimitHandler.handleExclusiveMinimum(exclMin, builder));
153159
maybe("exclusiveMaximum").ifPresent(exclMax -> exclusiveLimitHandler.handleExclusiveMaximum(exclMax, builder));
154160
return builder;

core/src/test/java/org/everit/json/schema/loader/SchemaLoaderTest.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -340,6 +340,14 @@ public void pointerResolutionQueryFailure() {
340340
});
341341
}
342342

343+
@Test
344+
void multipleOfShouldNotBeZero() {
345+
SchemaException thrown = Assertions.assertThrows(SchemaException.class, () -> {
346+
SchemaLoader.load(get("multipleOfShouldNotBeZero"));
347+
});
348+
assertEquals("#: multipleOf should not be 0", thrown.getMessage());
349+
}
350+
343351
@Test @Disabled
344352
public void propsAroundRefExtendTheReferredSchema() {
345353
ObjectSchema actual = (ObjectSchema) SchemaLoader

core/src/test/resources/org/everit/jsonvalidator/testschemas.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -730,5 +730,8 @@
730730
}
731731
}
732732
}
733+
},
734+
"multipleOfShouldNotBeZero": {
735+
"multipleOf": 0
733736
}
734737
}

0 commit comments

Comments
 (0)