From 2f6232dc128cb5d9d567b6bc56a554bc49159429 Mon Sep 17 00:00:00 2001 From: Tony Trinh Date: Tue, 26 Jan 2021 08:31:48 -0600 Subject: [PATCH 1/2] Fix infinite loop in namedGroups() when matches empty string #16 Fixes #16 --- src/main/java/com/google/code/regexp/Matcher.java | 2 +- src/test/java/com/google/code/regexp/MatcherTest.java | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/google/code/regexp/Matcher.java b/src/main/java/com/google/code/regexp/Matcher.java index 341c6f9..cf893b7 100644 --- a/src/main/java/com/google/code/regexp/Matcher.java +++ b/src/main/java/com/google/code/regexp/Matcher.java @@ -301,7 +301,7 @@ public List> namedGroups() { } int nextIndex = 0; - while (matcher.find(nextIndex)) { + while (!matcher.hitEnd() && matcher.find(nextIndex)) { Map matches = new LinkedHashMap(); for (String groupName : groupNames) { diff --git a/src/test/java/com/google/code/regexp/MatcherTest.java b/src/test/java/com/google/code/regexp/MatcherTest.java index fa2c537..dc13854 100644 --- a/src/test/java/com/google/code/regexp/MatcherTest.java +++ b/src/test/java/com/google/code/regexp/MatcherTest.java @@ -754,4 +754,13 @@ public void testNamedGroupsReturnsEmptyListWhenNoGroupPresent() { final List> groups = matcher.namedGroups(); assertTrue(groups.isEmpty()); } + + // tony19/named-regexp#16 + @Test(timeout=1000) + public void testNamedGroupsReturnsWhenMatchesEmptyString() { + com.google.code.regexp.Matcher matcher = com.google.code.regexp.Pattern.compile("(?.*)").matcher("bar"); + final List> groups = matcher.namedGroups(); + assertEquals(1, groups.size()); + assertEquals("bar", groups.get(0).get("foo")); + } } From b21c0761c497fcab71c64919a40a76ab899f1c74 Mon Sep 17 00:00:00 2001 From: Tony Trinh Date: Tue, 26 Jan 2021 08:34:46 -0600 Subject: [PATCH 2/2] Tweak test comment --- src/test/java/com/google/code/regexp/MatcherTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/google/code/regexp/MatcherTest.java b/src/test/java/com/google/code/regexp/MatcherTest.java index dc13854..01a79b3 100644 --- a/src/test/java/com/google/code/regexp/MatcherTest.java +++ b/src/test/java/com/google/code/regexp/MatcherTest.java @@ -755,7 +755,7 @@ public void testNamedGroupsReturnsEmptyListWhenNoGroupPresent() { assertTrue(groups.isEmpty()); } - // tony19/named-regexp#16 + // Specify 1 second timeout to account for potential infinite loop (Issue #16) @Test(timeout=1000) public void testNamedGroupsReturnsWhenMatchesEmptyString() { com.google.code.regexp.Matcher matcher = com.google.code.regexp.Pattern.compile("(?.*)").matcher("bar");