From ee2041464e60082a601d72be329bac57bc67328f Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Tue, 20 Aug 2024 10:38:33 -0400 Subject: [PATCH] Let existing catch clause handle the NPE edge case Add tests --- .../commons/lang3/math/NumberUtils.java | 50 +++---------------- .../commons/lang3/math/NumberUtilsTest.java | 18 +++++-- 2 files changed, 21 insertions(+), 47 deletions(-) diff --git a/src/main/java/org/apache/commons/lang3/math/NumberUtils.java b/src/main/java/org/apache/commons/lang3/math/NumberUtils.java index cc2eebc80..c3cb68c2b 100644 --- a/src/main/java/org/apache/commons/lang3/math/NumberUtils.java +++ b/src/main/java/org/apache/commons/lang3/math/NumberUtils.java @@ -784,7 +784,6 @@ private static boolean isZero(final String mant, final String dec) { public static byte max(final byte... array) { // Validates input validateArray(array); - // Finds and returns max byte max = array[0]; for (int i = 1; i < array.length; i++) { @@ -792,7 +791,6 @@ public static byte max(final byte... array) { max = array[i]; } } - return max; } @@ -827,7 +825,6 @@ public static byte max(byte a, final byte b, final byte c) { public static double max(final double... array) { // Validates input validateArray(array); - // Finds and returns max double max = array[0]; for (int j = 1; j < array.length; j++) { @@ -838,7 +835,6 @@ public static double max(final double... array) { max = array[j]; } } - return max; } @@ -871,7 +867,6 @@ public static double max(final double a, final double b, final double c) { public static float max(final float... array) { // Validates input validateArray(array); - // Finds and returns max float max = array[0]; for (int j = 1; j < array.length; j++) { @@ -882,7 +877,6 @@ public static float max(final float... array) { max = array[j]; } } - return max; } @@ -949,7 +943,6 @@ public static float max(final float a, final float b, final float c) { public static int max(final int... array) { // Validates input validateArray(array); - // Finds and returns max int max = array[0]; for (int j = 1; j < array.length; j++) { @@ -957,7 +950,6 @@ public static int max(final int... array) { max = array[j]; } } - return max; } @@ -991,7 +983,6 @@ public static int max(int a, final int b, final int c) { public static long max(final long... array) { // Validates input validateArray(array); - // Finds and returns max long max = array[0]; for (int j = 1; j < array.length; j++) { @@ -999,7 +990,6 @@ public static long max(final long... array) { max = array[j]; } } - return max; } @@ -1042,7 +1032,6 @@ public static short max(final short... array) { max = array[i]; } } - return max; } @@ -1076,7 +1065,6 @@ public static short max(short a, final short b, final short c) { public static byte min(final byte... array) { // Validates input validateArray(array); - // Finds and returns min byte min = array[0]; for (int i = 1; i < array.length; i++) { @@ -1084,7 +1072,6 @@ public static byte min(final byte... array) { min = array[i]; } } - return min; } @@ -1130,7 +1117,6 @@ public static double min(final double... array) { min = array[i]; } } - return min; } @@ -1174,7 +1160,6 @@ public static float min(final float... array) { min = array[i]; } } - return min; } @@ -1206,7 +1191,6 @@ public static float min(final float a, final float b, final float c) { public static int min(final int... array) { // Validates input validateArray(array); - // Finds and returns min int min = array[0]; for (int j = 1; j < array.length; j++) { @@ -1214,7 +1198,6 @@ public static int min(final int... array) { min = array[j]; } } - return min; } @@ -1248,7 +1231,6 @@ public static int min(int a, final int b, final int c) { public static long min(final long... array) { // Validates input validateArray(array); - // Finds and returns min long min = array[0]; for (int i = 1; i < array.length; i++) { @@ -1256,7 +1238,6 @@ public static long min(final long... array) { min = array[i]; } } - return min; } @@ -1291,7 +1272,6 @@ public static long min(long a, final long b, final long c) { public static short min(final short... array) { // Validates input validateArray(array); - // Finds and returns min short min = array[0]; for (int i = 1; i < array.length; i++) { @@ -1360,12 +1340,9 @@ public static byte toByte(final String str) { * @since 2.5 */ public static byte toByte(final String str, final byte defaultValue) { - if (str == null) { - return defaultValue; - } try { return Byte.parseByte(str); - } catch (final NumberFormatException nfe) { + } catch (final RuntimeException e) { return defaultValue; } } @@ -1453,12 +1430,9 @@ public static double toDouble(final String str) { * @since 2.1 */ public static double toDouble(final String str, final double defaultValue) { - if (str == null) { - return defaultValue; - } try { return Double.parseDouble(str); - } catch (final NumberFormatException nfe) { + } catch (final RuntimeException e) { return defaultValue; } } @@ -1505,12 +1479,9 @@ public static float toFloat(final String str) { * @since 2.1 */ public static float toFloat(final String str, final float defaultValue) { - if (str == null) { - return defaultValue; - } try { return Float.parseFloat(str); - } catch (final NumberFormatException nfe) { + } catch (final RuntimeException e) { return defaultValue; } } @@ -1554,12 +1525,9 @@ public static int toInt(final String str) { * @since 2.1 */ public static int toInt(final String str, final int defaultValue) { - if (str == null) { - return defaultValue; - } try { return Integer.parseInt(str); - } catch (final NumberFormatException nfe) { + } catch (final RuntimeException e) { return defaultValue; } } @@ -1603,12 +1571,9 @@ public static long toLong(final String str) { * @since 2.1 */ public static long toLong(final String str, final long defaultValue) { - if (str == null) { - return defaultValue; - } try { return Long.parseLong(str); - } catch (final NumberFormatException nfe) { + } catch (final RuntimeException e) { return defaultValue; } } @@ -1807,12 +1772,9 @@ public static short toShort(final String str) { * @since 2.5 */ public static short toShort(final String str, final short defaultValue) { - if (str == null) { - return defaultValue; - } try { return Short.parseShort(str); - } catch (final NumberFormatException nfe) { + } catch (final RuntimeException e) { return defaultValue; } } diff --git a/src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java b/src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java index 46f46630c..b07be6662 100644 --- a/src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java +++ b/src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java @@ -1612,6 +1612,8 @@ public void testStringToDoubleStringD() { assertEquals(NumberUtils.toDouble("-001.2345", 5.1d), -1.2345d, "toDouble(String, int) 4 failed"); assertEquals(1.2345d, NumberUtils.toDouble("+001.2345", 5.1d), "toDouble(String, int) 5 failed"); assertEquals(0d, NumberUtils.toDouble("000.00", 5.1d), "toDouble(String, int) 7 failed"); + assertEquals(5.1d, NumberUtils.toDouble("", 5.1d)); + assertEquals(5.1d, NumberUtils.toDouble((String) null, 5.1d)); } /** @@ -1632,6 +1634,8 @@ public void testToByteString() { public void testToByteStringI() { assertEquals(123, NumberUtils.toByte("123", (byte) 5), "toByte(String, byte) 1 failed"); assertEquals(5, NumberUtils.toByte("12.3", (byte) 5), "toByte(String, byte) 2 failed"); + assertEquals(5, NumberUtils.toByte("", (byte) 5)); + assertEquals(5, NumberUtils.toByte(null, (byte) 5)); } /** @@ -1665,6 +1669,8 @@ public void testToFloatStringF() { assertEquals(5.0f, NumberUtils.toFloat("-001Z.2345", 5.0f), "toFloat(String, int) 3 failed"); assertEquals(5.0f, NumberUtils.toFloat("+001AB.2345", 5.0f), "toFloat(String, int) 4 failed"); assertEquals(5.0f, NumberUtils.toFloat("001Z.2345", 5.0f), "toFloat(String, int) 5 failed"); + assertEquals(5.0f, NumberUtils.toFloat("", 5.0f)); + assertEquals(5.0f, NumberUtils.toFloat(null, 5.0f)); } /** @@ -1685,6 +1691,8 @@ public void testToIntString() { public void testToIntStringI() { assertEquals(12345, NumberUtils.toInt("12345", 5), "toInt(String, int) 1 failed"); assertEquals(5, NumberUtils.toInt("1234.5", 5), "toInt(String, int) 2 failed"); + assertEquals(5, NumberUtils.toInt("", 5)); + assertEquals(5, NumberUtils.toInt(null, 5)); } /** @@ -1709,6 +1717,8 @@ public void testToLongString() { public void testToLongStringL() { assertEquals(12345L, NumberUtils.toLong("12345", 5L), "toLong(String, long) 1 failed"); assertEquals(5L, NumberUtils.toLong("1234.5", 5L), "toLong(String, long) 2 failed"); + assertEquals(5L, NumberUtils.toLong("", 5L)); + assertEquals(5L, NumberUtils.toLong(null, 5L)); } /** @@ -1823,7 +1833,7 @@ public void testToScaledBigDecimalFloatIRM() { assertEquals("23521.0000", NumberUtils.toScaledBigDecimal(Float.valueOf(23.521f), 4, RoundingMode.HALF_EVEN) .multiply(BigDecimal.valueOf(1000)).toString(), "toScaledBigDecimal(Float, int, RoundingMode) 4 failed"); assertEquals(NumberUtils.toScaledBigDecimal((Float) null, 2, RoundingMode.HALF_UP), BigDecimal.ZERO, - "toScaledBigDecimal(Float, int, RoundingMode) 5 failed"); + "toScaledBigDecimal(Float, int, RoundingMode) 5 failed"); } /** @@ -1841,7 +1851,7 @@ public void testToScaledBigDecimalString() { assertEquals("2352.00", NumberUtils.toScaledBigDecimal("23.525").multiply(BigDecimal.valueOf(100)).toString(), "toScaledBigDecimal(String) 4 failed"); assertEquals(NumberUtils.toScaledBigDecimal((String) null), BigDecimal.ZERO, - "toScaledBigDecimal(String) 5 failed"); + "toScaledBigDecimal(String) 5 failed"); } /** @@ -1860,7 +1870,7 @@ public void testToScaledBigDecimalStringIRM() { .multiply(BigDecimal.valueOf(1000)).toString(), "toScaledBigDecimal(String, int, RoundingMode) 4 failed"); assertEquals(NumberUtils.toScaledBigDecimal((String) null, 2, RoundingMode.HALF_UP), BigDecimal.ZERO, - "toScaledBigDecimal(String, int, RoundingMode) 5 failed"); + "toScaledBigDecimal(String, int, RoundingMode) 5 failed"); } /** @@ -1881,5 +1891,7 @@ public void testToShortString() { public void testToShortStringI() { assertEquals(12345, NumberUtils.toShort("12345", (short) 5), "toShort(String, short) 1 failed"); assertEquals(5, NumberUtils.toShort("1234.5", (short) 5), "toShort(String, short) 2 failed"); + assertEquals(5, NumberUtils.toShort("", (short) 5)); + assertEquals(5, NumberUtils.toShort(null, (short) 5)); } }