Author: markt
Date: Sun Mar  2 21:28:25 2014
New Revision: 1573370

URL: http://svn.apache.org/r1573370
Log:
Better way to avoid NPE in resource cache - don't let the request get that far 
when we know we are going to fail it anyway.

Modified:
    tomcat/trunk/java/org/apache/catalina/webresources/AbstractResourceSet.java
    tomcat/trunk/java/org/apache/catalina/webresources/Cache.java
    tomcat/trunk/java/org/apache/catalina/webresources/LocalStrings.properties
    tomcat/trunk/java/org/apache/catalina/webresources/StandardRoot.java

Modified: 
tomcat/trunk/java/org/apache/catalina/webresources/AbstractResourceSet.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/webresources/AbstractResourceSet.java?rev=1573370&r1=1573369&r2=1573370&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/webresources/AbstractResourceSet.java 
(original)
+++ tomcat/trunk/java/org/apache/catalina/webresources/AbstractResourceSet.java 
Sun Mar  2 21:28:25 2014
@@ -39,7 +39,8 @@ public abstract class AbstractResourceSe
 
     protected final void checkPath(String path) {
         if (path == null || path.length() == 0 || path.charAt(0) != '/') {
-            throw new IllegalArgumentException();
+            throw new IllegalArgumentException(
+                    sm.getString("abstractResourceSet.checkPath", path));
         }
     }
 

Modified: tomcat/trunk/java/org/apache/catalina/webresources/Cache.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/webresources/Cache.java?rev=1573370&r1=1573369&r2=1573370&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/webresources/Cache.java (original)
+++ tomcat/trunk/java/org/apache/catalina/webresources/Cache.java Sun Mar  2 
21:28:25 2014
@@ -145,7 +145,7 @@ public class Cache {
 
     private boolean noCache(String path) {
         // Don't cache resources used by the class loader (it has its own 
cache)
-        if (path == null || path.startsWith("/WEB-INF/classes") ||
+        if (path.startsWith("/WEB-INF/classes") ||
                 path.startsWith("/WEB-INF/lib")) {
             return true;
         }

Modified: 
tomcat/trunk/java/org/apache/catalina/webresources/LocalStrings.properties
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/webresources/LocalStrings.properties?rev=1573370&r1=1573369&r2=1573370&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/webresources/LocalStrings.properties 
(original)
+++ tomcat/trunk/java/org/apache/catalina/webresources/LocalStrings.properties 
Sun Mar  2 21:28:25 2014
@@ -14,9 +14,12 @@
 # limitations under the License.
 
 abstractArchiveResourceSet.setReadOnlyFalse=Archive based WebResourceSets such 
as those based on JARs are hard-coded to be read-only and may not be configured 
to be read-write
+
 abstractResource.getContentFail=Unable to return [{0}] as a byte array
 abstractResource.getContentTooLarge=Unable to return [{0}] as a byte array 
since the resource is [{1}] bytes in size which is larger than the maximum size 
of a byte array
 
+abstractResourceSet.checkPath=The requested path [{0}] is not valid. It must 
begin with "/".
+
 cache.addFail=Unable to add the resource at [{0}] to the cache because there 
was insufficient free space available after evicting expired cache entries - 
consider increasing the maximum size of the cache
 cache.backgroundEvictFail=The background cache eviction process was unable to 
free [{0}] percent of the cache for Context [{1}] - consider increasing the 
maximum size of the cache. After eviction approximately [{2}] KB of data 
remained in the cache.
 cache.objectMaxSizeTooBig=The value of [{0}]kB for objectMaxSize is larger 
than the limit of maxSize/20 so has been reduced to [{1}]kB
@@ -37,6 +40,7 @@ standardRoot.createInvalidFile=Unable to
 standardRoot.createNoFileResourceSet=The FileResourceSet feature has not yet 
been implemented
 standardRoot.createUnknownType=Unable to create WebResourceSet of unknown type 
[{0}]
 standardRoot.invalidPath=The resource path [{0}] is not valid
+standardRoot.invalidPathNormal=The resource path [{0}] has been normalized to 
[{1}] which is not valid
 standardRoot.lockedFile=The web application [{0}] failed to close the file 
[{1}] opened via the following stack trace
 standardRoot.noContext=A Context has not been configured for this 
WebResourceRoot
 standardRoot.startInvalidMain=The main resource set specified [{0}] is not 
valid

Modified: tomcat/trunk/java/org/apache/catalina/webresources/StandardRoot.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/webresources/StandardRoot.java?rev=1573370&r1=1573369&r2=1573370&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/webresources/StandardRoot.java 
(original)
+++ tomcat/trunk/java/org/apache/catalina/webresources/StandardRoot.java Sun 
Mar  2 21:28:25 2014
@@ -237,7 +237,14 @@ public class StandardRoot extends Lifecy
             throw new IllegalArgumentException(
                     sm.getString("standardRoot.invalidPath", path));
         }
-        return RequestUtil.normalize(path);
+
+        String result = RequestUtil.normalize(path);
+        if (result == null || result.length() == 0 || !result.startsWith("/")) 
{
+            throw new IllegalArgumentException(
+                    sm.getString("standardRoot.invalidPathNormal", path, 
result));
+        }
+
+        return result;
     }
 
     protected final WebResource getResourceInternal(String path,



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to