Skip to content

Commit 3515abf

Browse files
committed
HTTPCLIENT-2367 - Fix NPE in InternalAbstractHttpAsyncClient by adding null check for resolvedTarget.
1 parent 19c0278 commit 3515abf

File tree

3 files changed

+24
-10
lines changed

3 files changed

+24
-10
lines changed

httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/InternalAbstractHttpAsyncClient.java

+8-5
Original file line numberDiff line numberDiff line change
@@ -219,12 +219,15 @@ protected <T> Future<T> doExecute(
219219
setupContext(clientContext);
220220

221221
final HttpHost resolvedTarget = target != null ? target : RoutingSupport.determineHost(request);
222-
if (request.getScheme() == null) {
223-
request.setScheme(resolvedTarget.getSchemeName());
224-
}
225-
if (request.getAuthority() == null) {
226-
request.setAuthority(new URIAuthority(resolvedTarget));
222+
if (resolvedTarget != null) {
223+
if (request.getScheme() == null) {
224+
request.setScheme(resolvedTarget.getSchemeName());
225+
}
226+
if (request.getAuthority() == null) {
227+
request.setAuthority(new URIAuthority(resolvedTarget));
228+
}
227229
}
230+
228231
final HttpRoute route = determineRoute(
229232
resolvedTarget,
230233
request,

httpclient5/src/main/java/org/apache/hc/client5/http/impl/classic/InternalHttpClient.java

+7-5
Original file line numberDiff line numberDiff line change
@@ -161,11 +161,13 @@ protected CloseableHttpResponse doExecute(
161161
setupContext(localcontext);
162162

163163
final HttpHost resolvedTarget = target != null ? target : RoutingSupport.determineHost(request);
164-
if (request.getScheme() == null) {
165-
request.setScheme(resolvedTarget.getSchemeName());
166-
}
167-
if (request.getAuthority() == null) {
168-
request.setAuthority(new URIAuthority(resolvedTarget));
164+
if (resolvedTarget != null) {
165+
if (request.getScheme() == null) {
166+
request.setScheme(resolvedTarget.getSchemeName());
167+
}
168+
if (request.getAuthority() == null) {
169+
request.setAuthority(new URIAuthority(resolvedTarget));
170+
}
169171
}
170172
final HttpRoute route = determineRoute(
171173
resolvedTarget,

httpclient5/src/test/java/org/apache/hc/client5/http/impl/classic/TestInternalHttpClient.java

+9
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,12 @@
4242
import org.apache.hc.client5.http.io.HttpClientConnectionManager;
4343
import org.apache.hc.client5.http.protocol.HttpClientContext;
4444
import org.apache.hc.client5.http.routing.HttpRoutePlanner;
45+
import org.apache.hc.core5.http.ClassicHttpRequest;
4546
import org.apache.hc.core5.http.HttpException;
4647
import org.apache.hc.core5.http.HttpHost;
4748
import org.apache.hc.core5.http.config.Lookup;
4849
import org.apache.hc.core5.http.impl.io.HttpRequestExecutor;
50+
import org.apache.hc.core5.http.io.support.ClassicRequestBuilder;
4951
import org.apache.hc.core5.http.message.BasicClassicHttpResponse;
5052
import org.junit.jupiter.api.Assertions;
5153
import org.junit.jupiter.api.BeforeEach;
@@ -233,4 +235,11 @@ void testClientCloseIOException() throws Exception {
233235
Mockito.verify(closeable2).close();
234236
}
235237

238+
@Test
239+
void testDoExecuteThrowsWhenNoTargetOrHost() {
240+
final ClassicHttpRequest request = ClassicRequestBuilder.get("/foo").build();
241+
final HttpClientContext context = HttpClientContext.create();
242+
Assertions.assertThrows(NullPointerException.class, () ->
243+
client.execute(null, request, context));
244+
}
236245
}

0 commit comments

Comments
 (0)