Skip to content

Commit

Permalink
Update apache httpclient to version 4.5.8 (elastic#40875)
Browse files Browse the repository at this point in the history
This change updates our version of httpclient to version 4.5.8, which
contains the fix for HTTPCLIENT-1968, which is a bug where the client
started re-writing paths that contained encoded reserved characters
with their unreserved form.
  • Loading branch information
jaymode authored and Gurkan Kaymak committed May 27, 2019
1 parent 4a75ba4 commit c43ed33
Show file tree
Hide file tree
Showing 20 changed files with 34 additions and 32 deletions.
2 changes: 1 addition & 1 deletion buildSrc/version.properties
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ bouncycastle = 1.61
# test dependencies
randomizedrunner = 2.7.1
junit = 4.12
httpclient = 4.5.7
httpclient = 4.5.8
httpcore = 4.4.11
httpasyncclient = 4.1.4
commonslogging = 1.1.3
Expand Down
1 change: 0 additions & 1 deletion client/rest/licenses/httpclient-4.5.7.jar.sha1

This file was deleted.

1 change: 1 addition & 0 deletions client/rest/licenses/httpclient-4.5.8.jar.sha1
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
c27c9d6f15435dc2b6947112027b418b0eef32b9
1 change: 0 additions & 1 deletion client/sniffer/licenses/httpclient-4.5.7.jar.sha1

This file was deleted.

1 change: 1 addition & 0 deletions client/sniffer/licenses/httpclient-4.5.8.jar.sha1
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
c27c9d6f15435dc2b6947112027b418b0eef32b9

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
c27c9d6f15435dc2b6947112027b418b0eef32b9
1 change: 0 additions & 1 deletion plugins/discovery-ec2/licenses/httpclient-4.5.7.jar.sha1

This file was deleted.

1 change: 1 addition & 0 deletions plugins/discovery-ec2/licenses/httpclient-4.5.8.jar.sha1
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
c27c9d6f15435dc2b6947112027b418b0eef32b9
1 change: 0 additions & 1 deletion plugins/discovery-gce/licenses/httpclient-4.5.7.jar.sha1

This file was deleted.

1 change: 1 addition & 0 deletions plugins/discovery-gce/licenses/httpclient-4.5.8.jar.sha1
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
c27c9d6f15435dc2b6947112027b418b0eef32b9
1 change: 0 additions & 1 deletion plugins/repository-gcs/licenses/httpclient-4.5.7.jar.sha1

This file was deleted.

1 change: 1 addition & 0 deletions plugins/repository-gcs/licenses/httpclient-4.5.8.jar.sha1
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
c27c9d6f15435dc2b6947112027b418b0eef32b9
1 change: 0 additions & 1 deletion plugins/repository-s3/licenses/httpclient-4.5.7.jar.sha1

This file was deleted.

1 change: 1 addition & 0 deletions plugins/repository-s3/licenses/httpclient-4.5.8.jar.sha1
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
c27c9d6f15435dc2b6947112027b418b0eef32b9
1 change: 0 additions & 1 deletion x-pack/plugin/core/licenses/httpclient-4.5.7.jar.sha1

This file was deleted.

1 change: 1 addition & 0 deletions x-pack/plugin/core/licenses/httpclient-4.5.8.jar.sha1
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
c27c9d6f15435dc2b6947112027b418b0eef32b9

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
bb984b73da2153285b660f3e278498abd94ccbb5
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.client.methods.HttpRequestWrapper;
import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.client.utils.URIUtils;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.conn.ssl.DefaultHostnameVerifier;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
Expand Down Expand Up @@ -65,10 +65,13 @@
import java.io.Closeable;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
Expand Down Expand Up @@ -314,33 +317,32 @@ private HttpProxy getProxyFromSettings(Settings settings) {
}

private Tuple<HttpHost, URI> createURI(HttpRequest request) {
// this could be really simple, as the apache http client has a UriBuilder class, however this class is always doing
// url path escaping, and we have done this already, so this would result in double escaping
try {
List<NameValuePair> qparams = new ArrayList<>(request.params.size());
request.params.forEach((k, v) -> qparams.add(new BasicNameValuePair(k, v)));
String format = URLEncodedUtils.format(qparams, "UTF-8");
URI uri = URIUtils.createURI(request.scheme.scheme(), request.host, request.port, request.path,
Strings.isNullOrEmpty(format) ? null : format, null);

if (uri.isAbsolute() == false) {
throw new IllegalStateException("URI [" + uri.toASCIIString() + "] must be absolute");
}
final HttpHost httpHost = URIUtils.extractHost(uri);
// what a mess that we need to do this to workaround https://issues.apache.org/jira/browse/HTTPCLIENT-1968
// in some cases the HttpClient will re-write the URI which drops the escaping for
// slashes within a path. This rewriting is done to obtain a relative URI when
// a proxy is not being used. To avoid this we can handle making it relative ourselves
if (request.path != null && request.path.contains("%2F")) {
final boolean isUsingProxy = (request.proxy != null && request.proxy.equals(HttpProxy.NO_PROXY) == false) ||
HttpProxy.NO_PROXY.equals(settingsProxy) == false;
if (isUsingProxy == false) {
// we need a relative uri
uri = URIUtils.createURI(null, null, -1, request.path, Strings.isNullOrEmpty(format) ? null : format, null);
// this could be really simple, as the apache http client has a UriBuilder class, however this class is always doing
// url path escaping, and we have done this already, so this would result in double escaping
final List<String> unescapedPathParts;
if (Strings.isEmpty(request.path)) {
unescapedPathParts = Collections.emptyList();
} else {
final String[] pathParts = request.path.split("/");
unescapedPathParts = new ArrayList<>(pathParts.length);
for (String part : pathParts) {
unescapedPathParts.add(URLDecoder.decode(part, StandardCharsets.UTF_8.name()));
}
}

final URI uri = new URIBuilder()
.setScheme(request.scheme().scheme())
.setHost(request.host)
.setPort(request.port)
.setPathSegments(unescapedPathParts)
.setParameters(qparams)
.build();
final HttpHost httpHost = URIUtils.extractHost(uri);
return new Tuple<>(httpHost, uri);
} catch (URISyntaxException e) {
} catch (URISyntaxException | UnsupportedEncodingException e) {
throw new IllegalArgumentException(e);
}
}
Expand Down

0 comments on commit c43ed33

Please sign in to comment.