HLRC: fix uri encode bug when url path starts with '/' (#34436)
This commit sets the authority of a URI to blank such that it does not misinterpret slashes in the path as the authority. Closes #34433
This commit is contained in:
parent
5347dec55e
commit
075078e7e0
|
@ -1126,7 +1126,9 @@ final class RequestConverters {
|
|||
//encode each part (e.g. index, type and id) separately before merging them into the path
|
||||
//we prepend "/" to the path part to make this path absolute, otherwise there can be issues with
|
||||
//paths that start with `-` or contain `:`
|
||||
URI uri = new URI(null, null, null, -1, "/" + pathPart, null, null);
|
||||
//the authority must be an empty string and not null, else paths that being with slashes could have them
|
||||
//misinterpreted as part of the authority.
|
||||
URI uri = new URI(null, "", "/" + pathPart, null, null);
|
||||
//manually encode any slash that each part may contain
|
||||
return uri.getRawPath().substring(1).replaceAll("/", "%2F");
|
||||
} catch (URISyntaxException e) {
|
||||
|
|
|
@ -1772,6 +1772,38 @@ public class RequestConvertersTests extends ESTestCase {
|
|||
.addPathPartAsIs("cache/clear");
|
||||
assertEquals("/index1,index2/cache/clear", endpointBuilder.build());
|
||||
}
|
||||
{
|
||||
EndpointBuilder endpointBuilder = new EndpointBuilder().addPathPart("/foo");
|
||||
assertEquals("/%2Ffoo", endpointBuilder.build());
|
||||
}
|
||||
{
|
||||
EndpointBuilder endpointBuilder = new EndpointBuilder().addPathPart("//foo");
|
||||
assertEquals("/%2F%2Ffoo", endpointBuilder.build());
|
||||
}
|
||||
{
|
||||
EndpointBuilder endpointBuilder = new EndpointBuilder().addPathPart("///foo");
|
||||
assertEquals("/%2F%2F%2Ffoo", endpointBuilder.build());
|
||||
}
|
||||
{
|
||||
EndpointBuilder endpointBuilder = new EndpointBuilder().addPathPart("/foo/bar");
|
||||
assertEquals("/%2Ffoo%2Fbar", endpointBuilder.build());
|
||||
}
|
||||
{
|
||||
EndpointBuilder endpointBuilder = new EndpointBuilder().addPathPart("//foo/bar");
|
||||
assertEquals("/%2F%2Ffoo%2Fbar", endpointBuilder.build());
|
||||
}
|
||||
{
|
||||
EndpointBuilder endpointBuilder = new EndpointBuilder().addPathPart("/foo@bar");
|
||||
assertEquals("/%2Ffoo@bar", endpointBuilder.build());
|
||||
}
|
||||
{
|
||||
EndpointBuilder endpointBuilder = new EndpointBuilder().addPathPart("//foo@bar");
|
||||
assertEquals("/%2F%2Ffoo@bar", endpointBuilder.build());
|
||||
}
|
||||
{
|
||||
EndpointBuilder endpointBuilder = new EndpointBuilder().addPathPart("/part1").addPathPart("//part2").addPathPart("///part3");
|
||||
assertEquals("/%2Fpart1/%2F%2Fpart2/%2F%2F%2Fpart3", endpointBuilder.build());
|
||||
}
|
||||
}
|
||||
|
||||
public void testEndpoint() {
|
||||
|
|
Loading…
Reference in New Issue