HtmlUnitRequestBuilder decodes parameter names

Previously HtmlUnitRequestBuilder did not decode parameter names. This
means if a parameter like row[0] was submittted it would be encoded as
row%5B0%5D When the HttpServletRequest was created the parameter name would
not be decoded so the parameter name row[0] would not be found.

This commit ensures that HTTP parameter names are decoded.

Issue SPR-14177
This commit is contained in:
Rob Winch
2016-04-15 10:23:00 -05:00
parent 64d4e91b6e
commit 87ed8e939c
2 changed files with 33 additions and 7 deletions

View File

@@ -411,6 +411,27 @@ public class HtmlUnitRequestBuilderTests {
assertThat(actualRequest.getParameter("name"), equalTo("value"));
}
// SPR-14177
@Test
public void buildRequestParameterMapDecodesParameterName() throws Exception {
webRequest.setUrl(new URL("http://example.com/example/?row%5B0%5D=value"));
MockHttpServletRequest actualRequest = requestBuilder.buildRequest(servletContext);
assertThat(actualRequest.getParameterMap().size(), equalTo(1));
assertThat(actualRequest.getParameter("row[0]"), equalTo("value"));
}
@Test
public void buildRequestParameterMapDecodesParameterValue() throws Exception {
webRequest.setUrl(new URL("http://example.com/example/?name=row%5B0%5D"));
MockHttpServletRequest actualRequest = requestBuilder.buildRequest(servletContext);
assertThat(actualRequest.getParameterMap().size(), equalTo(1));
assertThat(actualRequest.getParameter("name"), equalTo("row[0]"));
}
@Test
public void buildRequestParameterMapFromSingleQueryParamWithoutValueAndWithoutEqualsSign() throws Exception {
webRequest.setUrl(new URL("http://example.com/example/?name"));