ARTEMIS-1403 - Fix wildcard matching to always respect delimiters

The regular expressions for wildcard matching now properly respects the last
delimiter in a pattern and will not match a pattern missing the
delimiter by mistake
This commit is contained in:
Christopher L. Shannon (cshannon) 2017-09-07 07:57:38 -04:00 committed by Clebert Suconic
parent 7f9545f4f2
commit 983ec7eb88
2 changed files with 6 additions and 1 deletions

View File

@ -35,6 +35,8 @@ public class Match<T> {
private static final String WILDCARD_REPLACEMENT = ".*";
private static final String WILDCARD_CHILD_REPLACEMENT = "(\\..+)*";
private static final String DOT = ".";
private static final String DOT_REPLACEMENT = "\\.";
@ -59,7 +61,7 @@ public class Match<T> {
actMatch = actMatch.replace(Match.WORD_WILDCARD, Match.WORD_WILDCARD_REPLACEMENT);
// this one has to be done by last as we are using .* and it could be replaced wrongly
actMatch = actMatch.replace(Match.WILDCARD, Match.WILDCARD_REPLACEMENT);
actMatch = actMatch.replace(Match.WILDCARD, Match.WILDCARD_CHILD_REPLACEMENT);
}
pattern = Pattern.compile(actMatch);

View File

@ -59,6 +59,9 @@ public class RepositoryTest extends ActiveMQTestBase {
Assert.assertEquals("ab#", repo.getMatch("a.b.c"));
Assert.assertEquals("abd#", repo.getMatch("a.b.d.lll"));
Assert.assertEquals("root", repo.getMatch("z.z.z.z.z"));
Assert.assertEquals("root", repo.getMatch("a.babc"));
Assert.assertEquals("ab#", repo.getMatch("a.b.dabc"));
Assert.assertEquals("abd#", repo.getMatch("a.b.d"));
}
@Test