From aa3313cfc52287c05db4a0cbc51e779e13864788 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Mon, 26 Oct 2015 10:56:16 +0000 Subject: [PATCH] Update NamePatternFilter to detect regular expression character class MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Previously, NamePatternFilter looked for “*”, “$”, “^”, or “+” when trying to identify a string as being a regular expression. This meant that it missed the use of a character class ([a-z], for example). This commit adds “[“} to the list of characters that are considered to be part of a regular expression. Closes gh-4233 --- .../endpoint/mvc/NamePatternFilter.java | 2 +- .../endpoint/mvc/NamePatternFilterTests.java | 39 ++++++++++++++++++- 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/mvc/NamePatternFilter.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/mvc/NamePatternFilter.java index 996a95eac36..4db40bba5c5 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/mvc/NamePatternFilter.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/mvc/NamePatternFilter.java @@ -35,7 +35,7 @@ import java.util.regex.Pattern; */ abstract class NamePatternFilter { - private static final String[] REGEX_PARTS = { "*", "$", "^", "+" }; + private static final String[] REGEX_PARTS = { "*", "$", "^", "+", "[" }; private final T source; diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/mvc/NamePatternFilterTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/mvc/NamePatternFilterTests.java index bdc0a006e69..751852f0739 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/mvc/NamePatternFilterTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/mvc/NamePatternFilterTests.java @@ -22,6 +22,8 @@ import org.junit.Test; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.hasEntry; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.nullValue; import static org.junit.Assert.assertThat; /** @@ -41,13 +43,48 @@ public class NamePatternFilterTests { } @Test - public void regex() throws Exception { + public void regexRepetitionZeroOrMore() { MockNamePatternFilter filter = new MockNamePatternFilter(); Map results = filter.getResults("fo.*"); assertThat(results.get("foo"), equalTo((Object) "foo")); assertThat(results.get("fool"), equalTo((Object) "fool")); assertThat(filter.isGetNamesCalled(), equalTo(true)); + } + @Test + public void regexRepetitionOneOrMore() { + MockNamePatternFilter filter = new MockNamePatternFilter(); + Map results = filter.getResults("fo.+"); + assertThat(results.get("foo"), equalTo((Object) "foo")); + assertThat(results.get("fool"), equalTo((Object) "fool")); + assertThat(filter.isGetNamesCalled(), equalTo(true)); + } + + @Test + public void regexEndAnchor() { + MockNamePatternFilter filter = new MockNamePatternFilter(); + Map results = filter.getResults("foo$"); + assertThat(results.get("foo"), equalTo((Object) "foo")); + assertThat(results.get("fool"), is(nullValue())); + assertThat(filter.isGetNamesCalled(), equalTo(true)); + } + + @Test + public void regexStartAnchor() { + MockNamePatternFilter filter = new MockNamePatternFilter(); + Map results = filter.getResults("^foo"); + assertThat(results.get("foo"), equalTo((Object) "foo")); + assertThat(results.get("fool"), is(nullValue())); + assertThat(filter.isGetNamesCalled(), equalTo(true)); + } + + @Test + public void regexCharacterClass() { + MockNamePatternFilter filter = new MockNamePatternFilter(); + Map results = filter.getResults("fo[a-z]l"); + assertThat(results.get("foo"), is(nullValue())); + assertThat(results.get("fool"), equalTo((Object) "fool")); + assertThat(filter.isGetNamesCalled(), equalTo(true)); } private static class MockNamePatternFilter extends NamePatternFilter {