Use a 400 response for bad requests rather than a 500 response
diff --git a/java/org/apache/catalina/core/StandardWrapperValve.java b/java/org/apache/catalina/core/StandardWrapperValve.java
index 0cf0cd4..81592f6 100644
--- a/java/org/apache/catalina/core/StandardWrapperValve.java
+++ b/java/org/apache/catalina/core/StandardWrapperValve.java
@@ -169,7 +169,14 @@
}
}
- } catch (BadRequestException | CloseNowException e) {
+ } catch (BadRequestException e) {
+ if (container.getLogger().isDebugEnabled()) {
+ container.getLogger().debug(
+ sm.getString("standardWrapper.serviceException", wrapper.getName(), context.getName()), e);
+ }
+ throwable = e;
+ exception(request, response, e, HttpServletResponse.SC_BAD_REQUEST);
+ } catch (CloseNowException e) {
if (container.getLogger().isDebugEnabled()) {
container.getLogger().debug(
sm.getString("standardWrapper.serviceException", wrapper.getName(), context.getName()), e);
diff --git a/test/org/apache/coyote/http2/TestHttp2UpgradeHandler.java b/test/org/apache/coyote/http2/TestHttp2UpgradeHandler.java
index da7f9da..6f4e91a 100644
--- a/test/org/apache/coyote/http2/TestHttp2UpgradeHandler.java
+++ b/test/org/apache/coyote/http2/TestHttp2UpgradeHandler.java
@@ -201,10 +201,10 @@
buildPostRequest(frameHeader, headersPayload, false, dataFrameHeader, dataFramePayload, null, stream);
writeFrame(frameHeader, headersPayload);
- // 500 response (triggered by IOException trying to read body that never arrived)
+ // 400 response (triggered by IOException trying to read body that never arrived)
parser.readFrame();
Assert.assertTrue(output.getTrace(),
- output.getTrace().startsWith(stream + "-HeadersStart\n" + stream + "-Header-[:status]-[500]\n"));
+ output.getTrace().startsWith(stream + "-HeadersStart\n" + stream + "-Header-[:status]-[400]\n"));
output.clearTrace();
// reset frame
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index 113013a..933494e 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -150,6 +150,10 @@
<code>ApplicationHttpRequest</code> and <code>ApplicationRequest</code>.
(markt)
</fix>
+ <fix>
+ Use a 400 status code to report an error due to a bad request (e.g. an
+ invalid trailer header) rather than a 500 status code. (markt)
+ </fix>
</changelog>
</subsection>
<subsection name="Coyote">