Skip to content

Commit

Permalink
URI-encode forwarded location header in proxy
Browse files Browse the repository at this point in the history
Right now there are situations in which ElasticSearch puts characters in
the character code range between 128 and 255 into the `Location` header.
This leads to an exception when trying to pass on that header through
the hapi proxy in versions before 15.0.0, because it validates that only
US-ASCII characters are used in headers.

To work around that situation, the `Location` header is encoded using
`encodeURI()` for now.

Closes #8705
  • Loading branch information
weltenwort committed Oct 19, 2016
1 parent d0992b8 commit 18c23c1
Showing 1 changed file with 8 additions and 1 deletion.
9 changes: 8 additions & 1 deletion src/core_plugins/elasticsearch/lib/create_proxy.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,14 @@ function createProxy(server, method, route, config) {
xforward: true,
timeout: server.config().get('elasticsearch.requestTimeout'),
onResponse: function (err, responseFromUpstream, request, reply) {
reply(err, responseFromUpstream);
const upstreamLocation = responseFromUpstream.headers.location;
const response = reply(err, responseFromUpstream);

// Workaround for #8705 until hapi has been updated to >= 15.0.0
if (upstreamLocation) {
delete responseFromUpstream.headers.location;
response.location(encodeURI(upstreamLocation));
}
}
}
},
Expand Down

0 comments on commit 18c23c1

Please sign in to comment.