[
https://issues.apache.org/jira/browse/HTTPCLIENT-1995?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16869533#comment-16869533
]
Hartmut Arlt commented on HTTPCLIENT-1995:
------------------------------------------
The following test case checks for preservation of percent-encoded reserved
characters. It succeeds w/ HttpClient 4.5.6 but starts to fail since HttpClient
4.5.7.
{code:java}
import java.net.URI;
import java.util.stream.Collectors;
import org.apache.http.client.utils.URIUtils;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public class _3661_UrlPathSegmentTest
{
/*
* "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "=" / "@" /
":" / "/" / "?" / "#" / "[" / "]"
*/
private final Integer special;
public _3661_UrlPathSegmentTest(final Integer aSpecial)
{
this.special = aSpecial;
}
@Parameters(name = "charCode={0} (dec)")
public static Iterable<Object[]> data()
{
return "!$&'()*+,;=@:/?#[]".chars().boxed().map(c -> new Object[] { c
}).collect(Collectors.toList());
}
@Test
public void testEncodedCharacter() throws Throwable
{
final String path =
String.format("/some/path%%%xwith/encoded/segments", special);
final URI uri = new URI("http://example.org" + path);
final URI uri2 = URIUtils.rewriteURI(uri, null);
Assert.assertEquals(new URI(path), uri2);
}
}
{code}
> Percent-encoded ampersand in URI path not preserved
> ---------------------------------------------------
>
> Key: HTTPCLIENT-1995
> URL: https://issues.apache.org/jira/browse/HTTPCLIENT-1995
> Project: HttpComponents HttpClient
> Issue Type: Bug
> Components: HttpClient (classic)
> Affects Versions: 4.5.8, 4.5.9
> Environment: Linux Mint 19, OpenJDK 8
> Reporter: Hartmut Arlt
> Priority: Major
>
> Starting with HttpClient 4.5.8, percent-encoded ampersand characters in URI
> path segments are not preserved any longer but written in decoded form to
> wire due to path normalization performed by URIUtils.rewriteURI(URI,
> HttpHost).
>
> According to RFC 3986 (page 11+), the ampersand character is a delimiter and
> thus needs to be percent-encoded when not used for this purpose. Path
> normalization, as performed by HttpClient v4.5.8+, creates a new URI that is
> not equivalent to the original URI and thus leads to misinterpretation on
> server/receiver side.
> ??URIs that differ in the replacement of a reserved character with its??
> ??corresponding percent-encoded octet are not equivalent. Percent-??
> ??encoding a reserved character, or decoding a percent-encoded octet??
> ??that corresponds to a reserved character, will change how the URI is??
> ??interpreted by most applications??.
>
> A very simple test case is as follows:
> {code:java}
> @Test
> public void testAmpersand() throws Throwable
> {
> final URI uri = new
> URI("http://example.org/some/path%26with%20percent/encoded/segments");
> final URI uri2 = URIUtils.rewriteURI(uri, null);
>
> Assert.assertEquals(uri, uri2);
> }
> {code}
>
>
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]