Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimone Bordet2013-07-22 15:22:16 +0000
committerSimone Bordet2013-07-22 15:22:16 +0000
commit0aa2a5b6bbe1efb9cce8818ae0dfefd44b454475 (patch)
treee730d939c232aa928b9a4803ef8f5f7e37225e27
parent8f190476b7c3653dd56c3c2a140555af26bd74e8 (diff)
downloadorg.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.java8
-rw-r--r--jetty-client/src/test/java/org/eclipse/jetty/client/HttpClientURITest.java66
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());
+ }
}

Back to the top