Bug 54284

Summary: Util.objectNameValueNeedsQuote throws NPE for anonymous Filters
Product: Tomcat 7 Reporter: benjamin.gehrels_external
Component: CatalinaAssignee: Tomcat Developers Mailing List <dev>
Severity: normal CC: benjamin.gehrels_external
Priority: P2    
Version: 7.0.34   
Target Milestone: ---   
Hardware: PC   
OS: All   
Attachments: Patch proposal
Test case
patch proposal

Description benjamin.gehrels_external 2012-12-12 15:51:40 UTC
How to reproduce?

From inside the contextInitialized-Method of an ServletContextListener instance, call

      new ArbitraryFilter(pathPrefix)).addMappingForUrlPatterns(null, false, pathPrefix);

What happens?

Dec 12, 2012 3:59:03 PM org.apache.catalina.core.StandardContext filterStart
SEVERE: Exception starting filter null
        at org.apache.tomcat.util.modeler.Util.objectNameValueNeedsQuote(Util.java:26)
        at org.apache.catalina.core.ApplicationFilterConfig.registerJMX(ApplicationFilterConfig.java:421)
        at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:282)
        at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:108)
        at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4650)
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5306)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633)
        at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:657)
        at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1637)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
        at java.util.concurrent.FutureTask.run(FutureTask.java:166)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
        at java.lang.Thread.run(Thread.java:722)

Dec 12, 2012 3:59:03 PM org.apache.catalina.core.StandardContext startInternal
SEVERE: Error filterStart
Dec 12, 2012 3:59:03 PM org.apache.catalina.core.StandardContext startInternal
SEVERE: Context [] startup failed due to previous errors

What should happen?
Either - if null is not an allowed filter name, throw a IllegalArgumentException on context.addFilter(...)
Or, if it is an allowed filter name, handle null-values gracefully
Comment 1 benjamin.gehrels_external 2012-12-13 11:45:24 UTC
I just recognized that i created the bug with a wrong affected version number.
The bug happens in Rel. 7.0.34, probably as a result of fixing #54170
Comment 2 Violeta Georgieva 2013-01-02 21:56:02 UTC

I'm going to work on this.

Comment 3 Violeta Georgieva 2013-01-03 16:30:07 UTC

Servlet 3.0 javadoc does not specify what should be the behavior when filterName is NULL.
I requested a clarification [1] from the Servlet Specification expert group.
I'm changing the status to NEEDINFO.


[1] http://java.net/jira/browse/SERVLET_SPEC-51
Comment 4 Violeta Georgieva 2013-01-05 12:48:28 UTC
Created attachment 29817 [details]
Patch proposal
Comment 5 Violeta Georgieva 2013-01-05 12:51:17 UTC
Created attachment 29818 [details]
Test case
Comment 6 Violeta Georgieva 2013-01-05 12:55:33 UTC

As per clarification provided by Servlet Specification expert group - IllegalArgumentException should be thrown when filter name is NULL or empty string.

Patch proposal and test case are attached.

Any comments will be appreciated.

Comment 7 Violeta Georgieva 2013-01-07 11:57:14 UTC
Created attachment 29822 [details]
patch proposal
Comment 8 Mark Thomas 2013-01-07 19:11:04 UTC
Thanks for the patch and for working with the EG to obtain the clarification.

The patch has been applied to trunk and 7.0.x and will be included in 7.0.35 onwards.