From 778d0bd1c904617cd9623c0f2b77c8d798051468 Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Sat, 16 Mar 2024 22:14:58 +0100 Subject: [PATCH] fix regression caused by looksLikeValidNumber --- .../java/com/fasterxml/jackson/core/io/NumberInput.java | 4 ++-- .../java/com/fasterxml/jackson/core/io/NumberInputTest.java | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/fasterxml/jackson/core/io/NumberInput.java b/src/main/java/com/fasterxml/jackson/core/io/NumberInput.java index 86c73a8986..9ae5b99661 100644 --- a/src/main/java/com/fasterxml/jackson/core/io/NumberInput.java +++ b/src/main/java/com/fasterxml/jackson/core/io/NumberInput.java @@ -39,7 +39,7 @@ public final class NumberInput * @since 2.17 */ private final static Pattern PATTERN_FLOAT = Pattern.compile( - "[+-]?[0-9]+(\\.[0-9]+)?([eE][+-]?[0-9]+)?"); + "[+-]?([0-9]+)?(\\.[0-9]+)?([eE][+-]?[0-9]+)?"); /** * Fast method for parsing unsigned integers that are known to fit into @@ -578,6 +578,6 @@ public static BigInteger parseBigIntegerWithRadix(final String s, final int radi * @since 2.17 */ public static boolean looksLikeValidNumber(final String s) { - return (s != null) && PATTERN_FLOAT.matcher(s).matches(); + return s != null && PATTERN_FLOAT.matcher(s).matches() && !s.trim().isEmpty(); } } diff --git a/src/test/java/com/fasterxml/jackson/core/io/NumberInputTest.java b/src/test/java/com/fasterxml/jackson/core/io/NumberInputTest.java index d7634f8eab..16c32d896d 100644 --- a/src/test/java/com/fasterxml/jackson/core/io/NumberInputTest.java +++ b/src/test/java/com/fasterxml/jackson/core/io/NumberInputTest.java @@ -70,6 +70,11 @@ public void testLooksLikeValidNumber() assertTrue(NumberInput.looksLikeValidNumber("-1")); assertTrue(NumberInput.looksLikeValidNumber("0001")); // non-JSON + // https://github.com/FasterXML/jackson-databind/issues/4435 + assertTrue(NumberInput.looksLikeValidNumber(".01")); + assertTrue(NumberInput.looksLikeValidNumber("+.01")); + assertTrue(NumberInput.looksLikeValidNumber("-.01")); + assertTrue(NumberInput.looksLikeValidNumber("0.01")); assertTrue(NumberInput.looksLikeValidNumber("-0.10")); assertTrue(NumberInput.looksLikeValidNumber("+0.25")); // non-JSON @@ -84,6 +89,7 @@ public void testLooksLikeValidNumber() assertFalse(NumberInput.looksLikeValidNumber("")); assertFalse(NumberInput.looksLikeValidNumber(" ")); + assertFalse(NumberInput.looksLikeValidNumber(".")); assertFalse(NumberInput.looksLikeValidNumber("10_000")); } }