Author: markt
Date: Thu Jul 30 14:12:17 2015
New Revision: 1693429
URL: http://svn.apache.org/r1693429
Log:
Fix https://bz.apache.org/bugzilla/show_bug.cgi?id=58125
Avoid a possible ClassCircularityError when running under a security manager
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=1693429&r1=1693428&r2=1693429&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java
(original)
+++ tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java Thu
Jul 30 14:12:17 2015
@@ -1228,8 +1228,25 @@ public abstract class WebappClassLoaderB
// the webapp from overriding Java SE classes. This
implements
// SRV.10.7.2
String resourceName = binaryNameToPath(name, false);
+
ClassLoader javaseLoader = getJavaseClassLoader();
- if (javaseLoader.getResource(resourceName) != null) {
+ boolean tryLoadingFromJavaseLoader;
+ try {
+ // Use getResource as it won't trigger an expensive
+ // ClassNotFoundException if the resource is not available from
+ // the Java SE class loader. However (see
+ // https://bz.apache.org/bugzilla/show_bug.cgi?id=58125 for
+ // details) when running under a security manager in rare cases
+ // this call may trigger a ClassCircularityError.
+ tryLoadingFromJavaseLoader =
(javaseLoader.getResource(resourceName) != null);
+ } catch (ClassCircularityError cce) {
+ // The getResource() trick won't work for this class. We have
to
+ // try loading it directly and accept that we might get a
+ // ClassNotFoundException.
+ tryLoadingFromJavaseLoader = true;
+ }
+
+ if (tryLoadingFromJavaseLoader) {
try {
clazz = javaseLoader.loadClass(name);
if (clazz != null) {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]