You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2015/06/10 00:42:29 UTC

svn commit: r1684550 - /tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java

Author: markt
Date: Tue Jun  9 22:42:29 2015
New Revision: 1684550

URL: http://svn.apache.org/r1684550
Log:
Fix https://bz.apache.org/bugzilla/show_bug.cgi?id=58015
Delegate and filter() should be used consistently everywhere delegation is possible to ensure consistent behaviour of the class loader.

Modified:
    tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java

Modified: tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java?rev=1684550&r1=1684549&r2=1684550&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java (original)
+++ tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java Tue Jun  9 22:42:29 2015
@@ -190,11 +190,11 @@ public abstract class WebappClassLoaderB
      * from a webapp class loader without delegating first.
      */
     protected final Matcher packageTriggersDeny = Pattern.compile(
-            "^javax\\.el\\.|" +
-            "^javax\\.security\\.auth\\.message\\.|" +
-            "^javax\\.servlet\\.|" +
-            "^javax\\.websocket\\.|" +
-            "^org\\.apache\\.(catalina|coyote|el|jasper|juli|naming|tomcat)\\."
+            "^javax(\\.|/)el(\\.|/)|" +
+            "^javax(\\.|/)security(\\.|/)auth(\\.|/)message(\\.|/)|" +
+            "^javax(\\.|/)servlet(\\.|/)|" +
+            "^javax(\\.|/)websocket(\\.|/)|" +
+            "^org(\\.|/)apache(\\.|/)(catalina|coyote|el|jasper|juli|naming|tomcat)(\\.|/)"
             ).matcher("");
 
 
@@ -204,8 +204,8 @@ public abstract class WebappClassLoaderB
      * {@link #packageTriggersDeny}.
      */
     protected final Matcher packageTriggersPermit =
-            Pattern.compile("^javax\\.servlet\\.jsp\\.jstl\\.|" +
-                    "^org\\.apache\\.tomcat\\.jdbc\\.").matcher("");
+            Pattern.compile("^javax(\\.|/)servlet(\\.|/)jsp(\\.|/)jstl(\\.|/)|" +
+                    "^org(\\.|/)apache(\\.|/)tomcat(\\.|/)jdbc(\\.|/)").matcher("");
 
 
     /**
@@ -1027,8 +1027,10 @@ public abstract class WebappClassLoaderB
 
         URL url = null;
 
+        boolean delegateFirst = delegate || filter(name);
+
         // (1) Delegate to parent if requested
-        if (delegate) {
+        if (delegateFirst) {
             if (log.isDebugEnabled())
                 log.debug("  Delegating to parent classloader " + parent);
             url = parent.getResource(name);
@@ -1048,7 +1050,7 @@ public abstract class WebappClassLoaderB
         }
 
         // (3) Delegate to parent unconditionally if not already attempted
-        if( !delegate ) {
+        if (!delegateFirst) {
             url = parent.getResource(name);
             if (url != null) {
                 if (log.isDebugEnabled())
@@ -1092,8 +1094,10 @@ public abstract class WebappClassLoaderB
             return (stream);
         }
 
+        boolean delegateFirst = delegate || filter(name);
+
         // (1) Delegate to parent if requested
-        if (delegate) {
+        if (delegateFirst) {
             if (log.isDebugEnabled())
                 log.debug("  Delegating to parent classloader " + parent);
             stream = parent.getResourceAsStream(name);
@@ -1125,7 +1129,7 @@ public abstract class WebappClassLoaderB
         }
 
         // (3) Delegate to parent unconditionally
-        if (!delegate) {
+        if (!delegateFirst) {
             if (log.isDebugEnabled())
                 log.debug("  Delegating to parent classloader unconditionally " + parent);
             stream = parent.getResourceAsStream(name);



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