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-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org