From 8dfc02b8ecae96b6b08723a31132670813398cf0 Mon Sep 17 00:00:00 2001 From: Ulli Hafner Date: Thu, 13 Apr 2023 13:58:56 +0200 Subject: [PATCH 1/2] Handle overflow in fractional numbers gracefully. Fixes https://github.com/jenkinsci/code-coverage-api-plugin/issues/637 --- .../metrics/model/ElementFormatter.java | 3 ++- .../metrics/model/ElementFormatterTest.java | 22 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 plugin/src/test/java/io/jenkins/plugins/coverage/metrics/model/ElementFormatterTest.java diff --git a/plugin/src/main/java/io/jenkins/plugins/coverage/metrics/model/ElementFormatter.java b/plugin/src/main/java/io/jenkins/plugins/coverage/metrics/model/ElementFormatter.java index 506a25aea..f6bd4477d 100644 --- a/plugin/src/main/java/io/jenkins/plugins/coverage/metrics/model/ElementFormatter.java +++ b/plugin/src/main/java/io/jenkins/plugins/coverage/metrics/model/ElementFormatter.java @@ -15,6 +15,7 @@ import edu.hm.hafner.coverage.IntegerValue; import edu.hm.hafner.coverage.Metric; import edu.hm.hafner.coverage.Percentage; +import edu.hm.hafner.coverage.SafeFraction; import edu.hm.hafner.coverage.Value; import hudson.Functions; @@ -348,7 +349,7 @@ public String formatDelta(final Fraction fraction, final Metric metric, final Lo || metric.equals(Metric.LOC)) { return String.format(locale, "%+d", fraction.intValue()); } - return String.format(locale, "%+.2f%%", fraction.multiplyBy(HUNDRED).doubleValue()); + return String.format(locale, "%+.2f%%", new SafeFraction(fraction).multiplyBy(HUNDRED).doubleValue()); } /** diff --git a/plugin/src/test/java/io/jenkins/plugins/coverage/metrics/model/ElementFormatterTest.java b/plugin/src/test/java/io/jenkins/plugins/coverage/metrics/model/ElementFormatterTest.java new file mode 100644 index 000000000..d46e68401 --- /dev/null +++ b/plugin/src/test/java/io/jenkins/plugins/coverage/metrics/model/ElementFormatterTest.java @@ -0,0 +1,22 @@ +package io.jenkins.plugins.coverage.metrics.model; + +import java.util.Locale; + +import org.apache.commons.lang3.math.Fraction; +import org.junit.jupiter.api.Test; + +import edu.hm.hafner.coverage.Metric; + +import static org.assertj.core.api.Assertions.*; + +class ElementFormatterTest { + @Test + void shouldHandleOverflowGracefully() { + var formatter = new ElementFormatter(); + + var fraction = Fraction.getFraction(Integer.MAX_VALUE - 1, Integer.MAX_VALUE - 1); + var delta = formatter.formatDelta(fraction, Metric.LINE, Locale.ENGLISH); + + assertThat(delta).isEqualTo("+100.00%"); + } +} From 45abb16ca1424b5b9e8a88fd6022cb604d25159c Mon Sep 17 00:00:00 2001 From: Ulli Hafner Date: Thu, 13 Apr 2023 14:01:21 +0200 Subject: [PATCH 2/2] Bump version to 4.2.2. --- plugin/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugin/pom.xml b/plugin/pom.xml index 966b1175d..77a4cb3ca 100644 --- a/plugin/pom.xml +++ b/plugin/pom.xml @@ -19,7 +19,7 @@ https://github.com/jenkinsci/code-coverage-api-plugin - 4.3.0 + 4.2.2 -SNAPSHOT jenkinsci/code-coverage-api-plugin