https://bz.apache.org/bugzilla/show_bug.cgi?id=58581

            Bug ID: 58581
           Summary: StandardHostValve#custom throws NPE if custom error
                    page is incorrectly configured
           Product: Tomcat 9
           Version: unspecified
          Hardware: All
                OS: All
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Catalina
          Assignee: dev@tomcat.apache.org
          Reporter: huxing.zh...@gmail.com

Created attachment 33255
  --> https://bz.apache.org/bugzilla/attachment.cgi?id=33255&action=edit
proposed fix to avoid NPE

Minimal files to reproduce this issue:
1) create a directory named test and deploy it under webapps
test
├── WEB-INF
│   └── web.xml
├── error.html
└── test.html

the web.xml is as follows:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0">
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>/test.html</url-pattern>
    </servlet-mapping>

    <error-page>
        <error-code>404</error-code>
        <location>/error.html</location>
    </error-page>
</web-app>
2 ) start tomcat and visit http://localhost:8080/test/abc.html

The exception is thrown as follows:

04-Nov-2015 22:24:04.984 SEVERE [http-nio-8080-exec-1]
org.apache.catalina.core.StandardHostValve.custom Exception Processing         
            ErrorPage[errorCode=404, location=/error.html]
 java.lang.NullPointerException
    at
org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:391)
    at
org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:257)
    at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
    at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
    at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
    at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:361)
    at
org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:1057)
    at
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:75)
    at
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:737)
    at
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1531)
    at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)

The exception is not user-friendly, and somehow misleading. From the stack
trace, user is likely to consider it as a tomcat bug. 

The solution might be adding url-pattern /error.html to the default servlet, or
just change the url-pattern to match all the html resources.

My suggestion is to avoid such NPE and tell user what to do.

I have attached a proposed fix against trunk.

-- 
You are receiving this mail because:
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to