diff --git a/common/src/main/java/bisq/common/util/MathUtils.java b/common/src/main/java/bisq/common/util/MathUtils.java index a195b0781d..77c702b65d 100644 --- a/common/src/main/java/bisq/common/util/MathUtils.java +++ b/common/src/main/java/bisq/common/util/MathUtils.java @@ -42,6 +42,8 @@ public class MathUtils { public static double roundDouble(double value, int precision, RoundingMode roundingMode) { if (precision < 0) throw new IllegalArgumentException(); + if (!Double.isFinite(value)) + throw new IllegalArgumentException("Expected a finite double, but found " + value); try { BigDecimal bd = BigDecimal.valueOf(value); diff --git a/common/src/test/java/bisq/common/util/MathUtilsTest.java b/common/src/test/java/bisq/common/util/MathUtilsTest.java index 1d2f56ce34..7b3da8d843 100644 --- a/common/src/test/java/bisq/common/util/MathUtilsTest.java +++ b/common/src/test/java/bisq/common/util/MathUtilsTest.java @@ -24,6 +24,20 @@ import static org.junit.Assert.assertFalse; public class MathUtilsTest { + @Test(expected = IllegalArgumentException.class) + public void testRoundDoubleWithInfiniteArg() { + MathUtils.roundDouble(Double.POSITIVE_INFINITY, 2); + } + + @Test(expected = IllegalArgumentException.class) + public void testRoundDoubleWithNaNArg() { + MathUtils.roundDouble(Double.NaN, 2); + } + + @Test(expected = IllegalArgumentException.class) + public void testRoundDoubleWithNegativePrecision() { + MathUtils.roundDouble(3, -1); + } @SuppressWarnings("OptionalGetWithoutIsPresent") @Test