diff options
author | Simone Bordet | 2013-07-22 15:22:16 +0000 |
---|---|---|
committer | Simone Bordet | 2013-07-22 15:22:16 +0000 |
commit | 0aa2a5b6bbe1efb9cce8818ae0dfefd44b454475 (patch) | |
tree | e730d939c232aa928b9a4803ef8f5f7e37225e27 | |
parent | 8f190476b7c3653dd56c3c2a140555af26bd74e8 (diff) | |
download | org.eclipse.jetty.project-0aa2a5b6bbe1efb9cce8818ae0dfefd44b454475.tar.gz org.eclipse.jetty.project-0aa2a5b6bbe1efb9cce8818ae0dfefd44b454475.tar.xz org.eclipse.jetty.project-0aa2a5b6bbe1efb9cce8818ae0dfefd44b454475.zip |
411844 - ArrayIndexOutOfBoundsException on wild URL.
URLs like /path?= are now handled correctly.
-rw-r--r-- | jetty-client/src/main/java/org/eclipse/jetty/client/HttpRequest.java | 8 | ||||
-rw-r--r-- | jetty-client/src/test/java/org/eclipse/jetty/client/HttpClientURITest.java | 66 |
2 files changed, 73 insertions, 1 deletions
diff --git a/jetty-client/src/main/java/org/eclipse/jetty/client/HttpRequest.java b/jetty-client/src/main/java/org/eclipse/jetty/client/HttpRequest.java index 741f62b240..73357bf9e0 100644 --- a/jetty-client/src/main/java/org/eclipse/jetty/client/HttpRequest.java +++ b/jetty-client/src/main/java/org/eclipse/jetty/client/HttpRequest.java @@ -542,7 +542,13 @@ public class HttpRequest implements Request for (String nameValue : query.split("&")) { String[] parts = nameValue.split("="); - param(parts[0], parts.length < 2 ? "" : urlDecode(parts[1])); + if (parts.length > 0) + { + String name = parts[0]; + if (name.trim().length() == 0) + continue; + param(name, parts.length < 2 ? "" : urlDecode(parts[1])); + } } } } diff --git a/jetty-client/src/test/java/org/eclipse/jetty/client/HttpClientURITest.java b/jetty-client/src/test/java/org/eclipse/jetty/client/HttpClientURITest.java index 7e46e95b5a..610f891cfd 100644 --- a/jetty-client/src/test/java/org/eclipse/jetty/client/HttpClientURITest.java +++ b/jetty-client/src/test/java/org/eclipse/jetty/client/HttpClientURITest.java @@ -246,4 +246,70 @@ public class HttpClientURITest extends AbstractHttpClientServerTest Assert.assertEquals(HttpStatus.OK_200, response.getStatus()); } + + @Test + public void testNoParameterNameNoParameterValue() throws Exception + { + final String path = "/path"; + final String query = "="; // Bogus query + String pathQuery = path + "?" + query; + start(new AbstractHandler() + { + @Override + public void handle(String target, org.eclipse.jetty.server.Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException + { + baseRequest.setHandled(true); + Assert.assertEquals(path, request.getRequestURI()); + Assert.assertEquals(query, request.getQueryString()); + } + }); + + Request request = client.newRequest("localhost", connector.getLocalPort()) + .scheme(scheme) + .timeout(5, TimeUnit.SECONDS) + .path(pathQuery); + + Assert.assertEquals(path, request.getPath()); + Assert.assertEquals(query, request.getQuery()); + Assert.assertTrue(request.getURI().toString().endsWith(pathQuery)); + Fields params = request.getParams(); + Assert.assertEquals(0, params.size()); + + ContentResponse response = request.send(); + + Assert.assertEquals(HttpStatus.OK_200, response.getStatus()); + } + + @Test + public void testNoParameterNameWithParameterValue() throws Exception + { + final String path = "/path"; + final String query = "=1"; // Bogus query + String pathQuery = path + "?" + query; + start(new AbstractHandler() + { + @Override + public void handle(String target, org.eclipse.jetty.server.Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException + { + baseRequest.setHandled(true); + Assert.assertEquals(path, request.getRequestURI()); + Assert.assertEquals(query, request.getQueryString()); + } + }); + + Request request = client.newRequest("localhost", connector.getLocalPort()) + .scheme(scheme) + .timeout(5, TimeUnit.SECONDS) + .path(pathQuery); + + Assert.assertEquals(path, request.getPath()); + Assert.assertEquals(query, request.getQuery()); + Assert.assertTrue(request.getURI().toString().endsWith(pathQuery)); + Fields params = request.getParams(); + Assert.assertEquals(0, params.size()); + + ContentResponse response = request.send(); + + Assert.assertEquals(HttpStatus.OK_200, response.getStatus()); + } } |