diff --git a/hutool-core/src/main/java/cn/hutool/core/text/StrMatcher.java b/hutool-core/src/main/java/cn/hutool/core/text/StrMatcher.java index ccc59f87f9..3761cea4d6 100755 --- a/hutool-core/src/main/java/cn/hutool/core/text/StrMatcher.java +++ b/hutool-core/src/main/java/cn/hutool/core/text/StrMatcher.java @@ -46,6 +46,11 @@ public class StrMatcher { int to; for (String part : patterns) { if (StrUtil.isWrap(part, "${", "}")) { + // 禁止连续变量,例如${a}${b} + if (key != null) { + throw new IllegalArgumentException( + "Consecutive variables like ${a}${b} are not supported"); + } // 变量 key = StrUtil.sub(part, 2, part.length() - 1); } else { diff --git a/hutool-core/src/test/java/cn/hutool/core/text/StrMatcherTest.java b/hutool-core/src/test/java/cn/hutool/core/text/StrMatcherTest.java index 74aaf6f19c..76b436e4e3 100755 --- a/hutool-core/src/test/java/cn/hutool/core/text/StrMatcherTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/text/StrMatcherTest.java @@ -37,4 +37,17 @@ public class StrMatcherTest { assertEquals("小明", match.get("name")); assertEquals("20", match.get("year")); } + + @Test + public void issueIDFNF7Test() { + StrMatcher strMatcher = new StrMatcher("${a}${b}"); + + //final Map match = strMatcher.match("XY"); + //Console.log(match); // 此时会输出:"{b=XY}" + + assertThrows( + IllegalArgumentException.class, + () -> strMatcher.match("XY") + ); + } }