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..01a79b3 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()); } + + // 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"); + final List> groups = matcher.namedGroups(); + assertEquals(1, groups.size()); + assertEquals("bar", groups.get(0).get("foo")); + } }