Skip to content

Commit 4973e11

Browse files
Andreas Kluthrstoyanchev
Andreas Kluth
authored andcommitted
An empty X-Forwarded-Prefix with a path containing escape sequences leads to exceptions.
1 parent 2b94205 commit 4973e11

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

spring-web/src/main/java/org/springframework/web/server/adapter/ForwardedHeaderTransformer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ public ServerHttpRequest apply(ServerHttpRequest request) {
9696
builder.uri(uri);
9797
String prefix = getForwardedPrefix(request);
9898
if (prefix != null) {
99-
builder.path(prefix + uri.getPath());
99+
builder.path(prefix + uri.getRawPath());
100100
builder.contextPath(prefix);
101101
}
102102
}

spring-web/src/test/java/org/springframework/web/server/adapter/ForwardedHeaderTransformerTests.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,22 @@ public void xForwardedPrefix() throws Exception {
9090
assertForwardedHeadersRemoved(request);
9191
}
9292

93+
@Test
94+
public void emptyXForwardedPrefixShouldNotLeadToDecodedPath() throws Exception {
95+
HttpHeaders headers = new HttpHeaders();
96+
headers.add("X-Forwarded-Prefix", "");
97+
ServerHttpRequest request = MockServerHttpRequest
98+
.method(HttpMethod.GET, new URI("https://example.com/a%20b?q=a%2Bb"))
99+
.headers(headers)
100+
.build();
101+
102+
request = this.requestMutator.apply(request);
103+
104+
assertThat(request.getURI()).isEqualTo(new URI("https://example.com/a%20b?q=a%2Bb"));
105+
assertThat(request.getPath().value()).isEqualTo("/a%20b");
106+
assertForwardedHeadersRemoved(request);
107+
}
108+
93109
@Test
94110
public void xForwardedPrefixTrailingSlash() throws Exception {
95111
HttpHeaders headers = new HttpHeaders();

0 commit comments

Comments
 (0)