Skip to content

Commit

Permalink
Merge pull request #5456 from eclipse/jetty-9.4.x-reset-error-context…
Browse files Browse the repository at this point in the history
…-fixed

Fixes #5454 Reset Error Context
  • Loading branch information
joakime committed Oct 16, 2020
2 parents 820c79b + ba477fa commit 91f4516
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 0 deletions.
Expand Up @@ -1903,6 +1903,7 @@ protected void recycle()
_cookies.reset();
_cookiesExtracted = false;
_context = null;
_errorContext = null;
_newContext = false;
_pathInfo = null;
_queryEncoding = null;
Expand Down
Expand Up @@ -32,6 +32,10 @@
import org.eclipse.jetty.http.HttpHeader;
import org.eclipse.jetty.http.HttpTester;
import org.eclipse.jetty.server.handler.AbstractHandler;
import org.eclipse.jetty.server.handler.ContextHandler;
import org.eclipse.jetty.server.handler.ContextHandlerCollection;
import org.eclipse.jetty.server.handler.ErrorHandler;
import org.eclipse.jetty.util.BufferUtil;
import org.eclipse.jetty.util.ajax.JSON;
import org.eclipse.jetty.util.log.StacklessLogging;
import org.junit.jupiter.api.AfterAll;
Expand Down Expand Up @@ -566,4 +570,61 @@ public void testJsonResponseWorse(String path) throws Exception
// @checkstyle-enable-check : AvoidEscapedUnicodeCharacters
}
}

@Test
public void testErrorContextRecycle() throws Exception
{
server.stop();
ContextHandlerCollection contexts = new ContextHandlerCollection();
server.setHandler(contexts);
ContextHandler context = new ContextHandler("/foo");
contexts.addHandler(context);
context.setErrorHandler(new ErrorHandler()
{
@Override
public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
{
baseRequest.setHandled(true);
response.getOutputStream().println("Context Error");
}
});
context.setHandler(new AbstractHandler()
{
@Override
public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
{
response.sendError(444);
}
});

server.setErrorHandler(new ErrorHandler()
{
@Override
public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
{
baseRequest.setHandled(true);
response.getOutputStream().println("Server Error");
}
});

server.start();

LocalConnector.LocalEndPoint connection = connector.connect();
connection.addInputAndExecute(BufferUtil.toBuffer(
"GET /foo/test HTTP/1.1\r\n" +
"Host: Localhost\r\n" +
"\r\n"));
String response = connection.getResponse();

assertThat(response, containsString("HTTP/1.1 444 444"));
assertThat(response, containsString("Context Error"));

connection.addInputAndExecute(BufferUtil.toBuffer(
"GET /test HTTP/1.1\r\n" +
"Host: Localhost\r\n" +
"\r\n"));
response = connection.getResponse();
assertThat(response, containsString("HTTP/1.1 404 Not Found"));
assertThat(response, containsString("Server Error"));
}
}

0 comments on commit 91f4516

Please sign in to comment.