Handle invalid regex pattern in EnvironmentEndpoint

See gh-49942

Signed-off-by: Lee JiWon <dlwldnjs1009@gmail.com>
This commit is contained in:
Lee JiWon
2026-04-07 17:14:35 +02:00
committed by Stéphane Nicoll
parent b36edad27d
commit e27c72eeb9
2 changed files with 23 additions and 1 deletions
@@ -23,10 +23,12 @@ import java.util.List;
import java.util.Map;
import java.util.function.Predicate;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
import java.util.stream.Stream;
import com.fasterxml.jackson.annotation.JsonInclude;
import org.springframework.boot.actuate.endpoint.InvalidEndpointRequestException;
import org.springframework.boot.actuate.endpoint.OperationResponseBody;
import org.springframework.boot.actuate.endpoint.SanitizableData;
import org.springframework.boot.actuate.endpoint.Sanitizer;
@@ -87,11 +89,21 @@ public class EnvironmentEndpoint {
EnvironmentDescriptor getEnvironmentDescriptor(String pattern, boolean showUnsanitized) {
if (StringUtils.hasText(pattern)) {
return getEnvironmentDescriptor(Pattern.compile(pattern).asPredicate(), showUnsanitized);
return getEnvironmentDescriptor(getPatternPredicate(pattern), showUnsanitized);
}
return getEnvironmentDescriptor((name) -> true, showUnsanitized);
}
private Predicate<String> getPatternPredicate(String pattern) {
try {
return Pattern.compile(pattern).asPredicate();
}
catch (PatternSyntaxException ex) {
throw new InvalidEndpointRequestException("Pattern '" + pattern + "' is not a valid regular expression",
ex.getMessage());
}
}
private EnvironmentDescriptor getEnvironmentDescriptor(Predicate<String> propertyNamePredicate,
boolean showUnsanitized) {
List<PropertySourceDescriptor> propertySources = new ArrayList<>();
@@ -27,6 +27,7 @@ import java.util.Map;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
import org.springframework.boot.actuate.endpoint.InvalidEndpointRequestException;
import org.springframework.boot.actuate.endpoint.Show;
import org.springframework.boot.actuate.env.EnvironmentEndpoint.EnvironmentDescriptor;
import org.springframework.boot.actuate.env.EnvironmentEndpoint.EnvironmentEntryDescriptor;
@@ -48,6 +49,7 @@ import org.springframework.core.io.InputStreamSource;
import org.springframework.mock.env.MockPropertySource;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
/**
* Tests for {@link EnvironmentEndpoint}.
@@ -69,6 +71,14 @@ class EnvironmentEndpointTests {
System.clearProperty("VCAP_SERVICES");
}
@Test
void invalidPatternThrowsInvalidEndpointRequestException() {
ConfigurableEnvironment environment = emptyEnvironment();
EnvironmentEndpoint endpoint = new EnvironmentEndpoint(environment, Collections.emptyList(), Show.ALWAYS);
assertThatExceptionOfType(InvalidEndpointRequestException.class).isThrownBy(() -> endpoint.environment("["))
.withMessageContaining("Pattern '[' is not a valid regular expression");
}
@Test
void basicResponse() {
ConfigurableEnvironment environment = emptyEnvironment();