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