From 5e7377479efbecd9a90699f0d6759c1c428d5a76 Mon Sep 17 00:00:00 2001 From: cd2357 Date: Mon, 29 Mar 2021 19:44:09 +0200 Subject: [PATCH] Handle rounding of infinite Doubles In certain situations we deal with infinite (or NaN) doubles. This causes issues when trying to instantiate a BigDecimal from it, which is an intermediary step in the process of rounding the double. This commit checks for such non-finite doubles and throws a specific exception if their rounding is attempted. --- .../src/main/java/bisq/common/util/MathUtils.java | 2 ++ .../test/java/bisq/common/util/MathUtilsTest.java | 14 ++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/common/src/main/java/bisq/common/util/MathUtils.java b/common/src/main/java/bisq/common/util/MathUtils.java index a195b0781d1..77c702b65d8 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 static double roundDouble(double value, int precision) { 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 1d2f56ce347..7b3da8d8437 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 @@ 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