From 018647d87312154e6aa593df7816d124da29ffea Mon Sep 17 00:00:00 2001 From: gregw Date: Wed, 25 Sep 2024 10:42:16 +1000 Subject: [PATCH] Added test for #11298 --- .../servlet/ComplianceViolations2616Test.java | 26 +++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/jetty-ee10/jetty-ee10-servlet/src/test/java/org/eclipse/jetty/ee10/servlet/ComplianceViolations2616Test.java b/jetty-ee10/jetty-ee10-servlet/src/test/java/org/eclipse/jetty/ee10/servlet/ComplianceViolations2616Test.java index f3bea6be187b..a617a9f9aab1 100644 --- a/jetty-ee10/jetty-ee10-servlet/src/test/java/org/eclipse/jetty/ee10/servlet/ComplianceViolations2616Test.java +++ b/jetty-ee10/jetty-ee10-servlet/src/test/java/org/eclipse/jetty/ee10/servlet/ComplianceViolations2616Test.java @@ -32,6 +32,7 @@ import jakarta.servlet.http.HttpServletResponse; import org.eclipse.jetty.http.ComplianceViolation; import org.eclipse.jetty.http.HttpCompliance; +import org.eclipse.jetty.http.UriCompliance; import org.eclipse.jetty.server.HttpConfiguration; import org.eclipse.jetty.server.HttpConnectionFactory; import org.eclipse.jetty.server.LocalConnector; @@ -87,8 +88,8 @@ protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws Se { resp.setContentType("text/plain"); PrintWriter out = resp.getWriter(); - List headerNames = new ArrayList<>(); - headerNames.addAll(Collections.list(req.getHeaderNames())); + out.printf("%s %s%s%s\n", req.getMethod(), req.getContextPath(), req.getServletPath(), req.getPathInfo()); + List headerNames = new ArrayList<>(Collections.list(req.getHeaderNames())); Collections.sort(headerNames); for (String name : headerNames) { @@ -183,4 +184,25 @@ public void testFoldedHeader() throws Exception assertThat("Response headers", response, containsString("X-Http-Violation-0: Line Folding not supported")); assertThat("Response body", response, containsString("[Name] = [Some Value]")); } + + @Test + public void testAmbiguousSlash() throws Exception + { + String request = """ + GET /dump/foo//bar HTTP/1.1\r + Host: local\r + Connection: close\r + \r + """; + + String response = connector.getResponse(request); + assertThat(response, containsString("HTTP/1.1 400 Bad")); + + connector.getConnectionFactory(HttpConnectionFactory.class).getHttpConfiguration().setUriCompliance(UriCompliance.RFC3986.with("test", UriCompliance.Violation.AMBIGUOUS_EMPTY_SEGMENT)); + server.getContainedBeans(ServletHandler.class).stream().findFirst().get().setDecodeAmbiguousURIs(true); + + response = connector.getResponse(request); + assertThat(response, containsString("HTTP/1.1 200 OK")); + assertThat(response, containsString("GET /dump/foo//bar")); + } }