|Summary:||ErrorReportValve invoked on non-error responses too|
|Product:||Tomcat 6||Reporter:||Michael Osipov <michaelo>|
|Component:||Catalina||Assignee:||Tomcat Developers Mailing List <dev>|
Description Michael Osipov 2012-11-28 20:19:49 UTC
If you issue a response.setStatus(404) from a servlet, you expect as per spec that the response is left untouched. No error page written. There is sendError for that. Unfortunately, ErrorReportValve reacts on line 158 > if ((statusCode < 400) || (response.getContentCount() > 0)) > return; If you take a look at the StandardHostValve, it invokes error handling on line 316 > if (!response.isError()) > return; On errors only (correct behavior). The ErrorReportValve must react on response.isError() == true only. Regardless of the status code or the content count. The Javadoc does not limit this to status codes >= 400 but is says that reponse.sendError() has to clears buffers. As far I understand that, regardless of the response body is disposed and the error reponse is always written.
Comment 1 Mark Thomas 2012-12-03 14:21:22 UTC
Fixed in trunk and 7.0.x and will be included in 7.0.34 onwards.
Comment 2 Mark Thomas 2012-12-03 14:23:56 UTC
Opps. Need to keep this open until 6.0x. is fixed.
Comment 3 Mark Thomas 2012-12-03 14:42:38 UTC
Proposed for 6.0.x