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: [email protected]
For additional commands, e-mail: [email protected]