[
https://issues.apache.org/jira/browse/SLING-4143?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Bertrand Delacretaz resolved SLING-4143.
----------------------------------------
Resolution: Fixed
Fixed in http://svn.apache.org/r1638757 by having SlingServletResolver and
SlingRequestProcessorImpl forward Exception and Error from error handling
servlets, and return HTTP status 500 when that happens.
See the diffs or ErrorHandlingTest.java for what changed, as before that I
added tests to http://svn.apache.org/r1638735 which demonstrate the old
behavior.
The resulting 500 error page doesn't include the stack trace, it's just
something like
{code}
IOException in ErrorHandler
RequestURI=/apps/testNode.421.errorScriptException.html
Servlet= /apps/servlets/errorhandler/testErrorHandler/testErrorHandler.jsp
ApacheSling/2.3 (jetty/7.x.y-SNAPSHOT, Java HotSpot(TM) 64-Bit Server VM
1.7.0_45, Mac OS X 10.9.5 x86_64)
{code}
> Exception or Error in error handler script/servlet should cause HTTP status
> 500
> -------------------------------------------------------------------------------
>
> Key: SLING-4143
> URL: https://issues.apache.org/jira/browse/SLING-4143
> Project: Sling
> Issue Type: Bug
> Components: Engine
> Affects Versions: Servlets Resolver 2.3.2, Engine 2.3.8
> Reporter: Bertrand Delacretaz
> Assignee: Bertrand Delacretaz
> Fix For: Servlets Resolver 2.3.4, Engine 2.3.10
>
>
> It looks like Sling does not set the response status if a custom error
> handler script is present which does not set the status itself. See examples
> below.
> I think Sling should detect this and set a sensible non-200 status in this
> case.
> Example 1: script doesn't set status _(update: after discussion on list we
> won't change this)_
> {code}
> $ cat > 404.jsp
> <html>Custom 404 page</html>
> $ curl -u admin:admin -T 404.jsp
> http://localhost:8888/apps/sling/servlet/errorhandler/404.jsp
> $ curl -D - http://localhost:8888/nonexisting
> HTTP/1.1 200 OK
> ...
> <html>Custom 404 page</html>
> {code}
> Example 2, scripts throws a RuntimeException - blank response with 200 status
> - this is wrong
> {code}
> $ cat > 404.jsp
> <% if(true) throw new RuntimeException("404 page failed"); %>
> $ curl -u admin:admin -T 404.jsp
> http://localhost:8888/apps/sling/servlet/errorhandler/404.jsp
> $ curl -D - http://localhost:8888/nonexisting
> HTTP/1.1 200 OK
> ...
> Content-Length: 0
> Server: Jetty(7.x.y-SNAPSHOT)
> {code}
> Example 3: scripts sets status - this one looks correct.
> {code}
> $ cat > 404.jsp
> <% response.setStatus(421); %>
> Custom 421 page
> $ curl -u admin:admin -T 404.jsp
> http://localhost:8888/apps/sling/servlet/errorhandler/404.jsp
> $ curl -D - http://localhost:8888/nonexisting
> HTTP/1.1 421 421
> ...
> Server: Jetty(7.x.y-SNAPSHOT)
> Custom 421 page
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)