Skip to content

Commit 2c43418

Browse files
committed
Merge reactor#2724 into 1.1.5
2 parents c053477 + 9b23fed commit 2c43418

File tree

2 files changed

+48
-4
lines changed

2 files changed

+48
-4
lines changed

reactor-netty-http/src/main/java/reactor/netty/http/server/ConnectionInfo.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,12 @@ static ConnectionInfo from(Channel channel, HttpRequest request, boolean secured
6565
String header = request.headers().get(HttpHeaderNames.HOST);
6666
if (header != null) {
6767
hostName = header;
68-
int portIndex = header.charAt(0) == '[' ? header.indexOf(':', header.indexOf(']')) : header.indexOf(':');
69-
if (portIndex != -1) {
70-
hostName = header.substring(0, portIndex);
71-
hostPort = Integer.parseInt(header.substring(portIndex + 1));
68+
if (!header.isEmpty()) {
69+
int portIndex = header.charAt(0) == '[' ? header.indexOf(':', header.indexOf(']')) : header.indexOf(':');
70+
if (portIndex != -1) {
71+
hostName = header.substring(0, portIndex);
72+
hostPort = Integer.parseInt(header.substring(portIndex + 1));
73+
}
7274
}
7375
}
7476

reactor-netty-http/src/test/java/reactor/netty/http/server/ConnectionInfoTests.java

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,20 @@ void noHeaders() {
9090
});
9191
}
9292

93+
@Test
94+
void noHeadersEmptyHostHeader() {
95+
testClientRequest(
96+
clientRequestHeaders -> clientRequestHeaders.set(HttpHeaderNames.HOST, ""),
97+
serverRequest -> {
98+
Assertions.assertThat(serverRequest.hostAddress().getHostString())
99+
.containsPattern("^0:0:0:0:0:0:0:1(%\\w*)?|127.0.0.1$");
100+
Assertions.assertThat(serverRequest.hostAddress().getPort()).isEqualTo(this.disposableServer.port());
101+
Assertions.assertThat(serverRequest.hostName()).isEmpty();
102+
int port = serverRequest.scheme().equals("https") ? DEFAULT_HTTPS_PORT : DEFAULT_HTTP_PORT;
103+
Assertions.assertThat(serverRequest.hostPort()).isEqualTo(port);
104+
});
105+
}
106+
93107
@Test
94108
void hostHeaderNoForwardedHeaders() {
95109
testClientRequest(
@@ -130,6 +144,20 @@ void forwardedHost() {
130144
});
131145
}
132146

147+
@Test
148+
void forwardedHostEmptyHostHeader() {
149+
testClientRequest(
150+
clientRequestHeaders -> clientRequestHeaders.add("Forwarded", "host=192.168.0.1")
151+
.set(HttpHeaderNames.HOST, ""),
152+
serverRequest -> {
153+
Assertions.assertThat(serverRequest.hostAddress().getHostString()).isEqualTo("192.168.0.1");
154+
int port = serverRequest.scheme().equals("https") ? DEFAULT_HTTPS_PORT : DEFAULT_HTTP_PORT;
155+
Assertions.assertThat(serverRequest.hostAddress().getPort()).isEqualTo(port);
156+
Assertions.assertThat(serverRequest.hostName()).isEqualTo("192.168.0.1");
157+
Assertions.assertThat(serverRequest.hostPort()).isEqualTo(port);
158+
});
159+
}
160+
133161
@Test
134162
void forwardedHostIpV6() {
135163
testClientRequest(
@@ -168,6 +196,20 @@ void xForwardedHost() {
168196
});
169197
}
170198

199+
@Test
200+
void xForwardedHostEmptyHostHeader() {
201+
testClientRequest(
202+
clientRequestHeaders -> clientRequestHeaders.add("X-Forwarded-Host",
203+
"[1abc:2abc:3abc::5ABC:6abc], 192.168.0.1").set(HttpHeaderNames.HOST, ""),
204+
serverRequest -> {
205+
Assertions.assertThat(serverRequest.hostAddress().getHostString()).isEqualTo("1abc:2abc:3abc:0:0:0:5abc:6abc");
206+
int port = serverRequest.scheme().equals("https") ? DEFAULT_HTTPS_PORT : DEFAULT_HTTP_PORT;
207+
Assertions.assertThat(serverRequest.hostAddress().getPort()).isEqualTo(port);
208+
Assertions.assertThat(serverRequest.hostName()).isEqualTo("1abc:2abc:3abc:0:0:0:5abc:6abc");
209+
Assertions.assertThat(serverRequest.hostPort()).isEqualTo(port);
210+
});
211+
}
212+
171213
@Test
172214
void xForwardedHostPortIncluded() {
173215
testClientRequest(

0 commit comments

Comments
 (0)