diff --git a/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/ResponseHeadersTest.java b/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/ResponseHeadersTest.java index 0c1907403da1..25b1def6c5a2 100644 --- a/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/ResponseHeadersTest.java +++ b/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/ResponseHeadersTest.java @@ -33,15 +33,14 @@ import org.eclipse.jetty.http.HttpVersion; import org.eclipse.jetty.server.LocalConnector; import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.util.BufferUtil; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; public class ResponseHeadersTest { - /** Pretend to be a WebSocket Upgrade (not real) */ - @SuppressWarnings("serial") - private static class SimulateUpgradeServlet extends HttpServlet + public static class SimulateUpgradeServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException @@ -54,13 +53,27 @@ protected void doGet(HttpServletRequest req, HttpServletResponse response) throw } } + public static class MultilineResponseValueServlet extends HttpServlet + { + @Override + protected void doGet(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException + { + // The bad use-case + response.setHeader("X-example", req.getPathInfo()); + + // The correct use + response.setContentType("text/plain"); + response.setCharacterEncoding("utf-8"); + response.getWriter().println("Got request uri - " + req.getRequestURI()); + } + } + private static Server server; private static LocalConnector connector; @BeforeClass public static void startServer() throws Exception { - // Configure Server server = new Server(); connector = new LocalConnector(server); server.addConnector(connector); @@ -69,10 +82,9 @@ public static void startServer() throws Exception context.setContextPath("/"); server.setHandler(context); - // Serve capture servlet context.addServlet(new ServletHolder(new SimulateUpgradeServlet()),"/ws/*"); + context.addServlet(new ServletHolder(new MultilineResponseValueServlet()),"/multiline/*"); - // Start Server server.start(); } @@ -106,4 +118,23 @@ public void testResponseWebSocketHeaderFormat() throws Exception assertThat("Response Header Upgrade",response.get("Upgrade"),is("WebSocket")); assertThat("Response Header Connection",response.get("Connection"),is("Upgrade")); } + + @Test + public void testMultilineResponseHeaderValue() throws Exception + { + HttpTester.Request request = new HttpTester.Request(); + request.setMethod("GET"); + request.setURI("/multiline/%0A%20Content-Type%3A%20image/png%0A%20Content-Length%3A%208%0A%20%0A%20yuck