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