Author: markt Date: Wed Apr 5 10:23:03 2017 New Revision: 1790202 URL: http://svn.apache.org/viewvc?rev=1790202&view=rev Log: Partial fix for https://bz.apache.org/bugzilla/show_bug.cgi?id=47214 Replace explicitly referenced anonymous inner classes in DefaultInstanceManager with named inner classes.
Modified: tomcat/trunk/java/org/apache/catalina/core/DefaultInstanceManager.java tomcat/trunk/java/org/apache/catalina/security/SecurityClassLoad.java Modified: tomcat/trunk/java/org/apache/catalina/core/DefaultInstanceManager.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/DefaultInstanceManager.java?rev=1790202&r1=1790201&r2=1790202&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/core/DefaultInstanceManager.java (original) +++ tomcat/trunk/java/org/apache/catalina/core/DefaultInstanceManager.java Wed Apr 5 10:23:03 2017 @@ -475,13 +475,8 @@ public class DefaultInstanceManager impl Class<?> clazz; if (SecurityUtil.isPackageProtectionEnabled()) { try { - clazz = AccessController.doPrivileged(new PrivilegedExceptionAction<Class<?>>() { - - @Override - public Class<?> run() throws Exception { - return loadClass(className, classLoader); - } - }); + clazz = AccessController.doPrivileged( + new PrivilegedLoadClass(className, classLoader)); } catch (PrivilegedActionException e) { Throwable t = e.getCause(); if (t instanceof ClassNotFoundException) { @@ -644,22 +639,7 @@ public class DefaultInstanceManager impl final AnnotationCacheEntry entry) { Method result = null; if (Globals.IS_SECURITY_ENABLED) { - result = AccessController.doPrivileged( - new PrivilegedAction<Method>() { - @Override - public Method run() { - Method result = null; - try { - result = clazz.getDeclaredMethod( - entry.getAccessibleObjectName(), - entry.getParamTypes()); - } catch (NoSuchMethodException e) { - // Should never happen. On that basis don't log - // it. - } - return result; - } - }); + result = AccessController.doPrivileged(new PrivilegedGetMethod(clazz, entry)); } else { try { result = clazz.getDeclaredMethod( @@ -675,25 +655,10 @@ public class DefaultInstanceManager impl final AnnotationCacheEntry entry) { Field result = null; if (Globals.IS_SECURITY_ENABLED) { - result = AccessController.doPrivileged( - new PrivilegedAction<Field>() { - @Override - public Field run() { - Field result = null; - try { - result = clazz.getDeclaredField( - entry.getAccessibleObjectName()); - } catch (NoSuchFieldException e) { - // Should never happen. On that basis don't log - // it. - } - return result; - } - }); + result = AccessController.doPrivileged(new PrivilegedGetField(clazz, entry)); } else { try { - result = clazz.getDeclaredField( - entry.getAccessibleObjectName()); + result = clazz.getDeclaredField(entry.getAccessibleObjectName()); } catch (NoSuchFieldException e) { // Should never happen. On that basis don't log it. } @@ -769,7 +734,72 @@ public class DefaultInstanceManager impl } } + private static enum AnnotationCacheEntryType { FIELD, SETTER, POST_CONSTRUCT, PRE_DESTROY } + + + private static class PrivilegedGetField implements PrivilegedAction<Field> { + + private final Class<?> clazz; + private final AnnotationCacheEntry entry; + + public PrivilegedGetField(Class<?> clazz, AnnotationCacheEntry entry) { + this.clazz = clazz; + this.entry = entry; + } + + @Override + public Field run() { + Field result = null; + try { + result = clazz.getDeclaredField(entry.getAccessibleObjectName()); + } catch (NoSuchFieldException e) { + // Should never happen. On that basis don't log it. + } + return result; + } + } + + + private static class PrivilegedGetMethod implements PrivilegedAction<Method> { + + private final Class<?> clazz; + private final AnnotationCacheEntry entry; + + public PrivilegedGetMethod(Class<?> clazz, AnnotationCacheEntry entry) { + this.clazz = clazz; + this.entry = entry; + } + + @Override + public Method run() { + Method result = null; + try { + result = clazz.getDeclaredMethod( + entry.getAccessibleObjectName(), entry.getParamTypes()); + } catch (NoSuchMethodException e) { + // Should never happen. On that basis don't log it. + } + return result; + } + } + + + private class PrivilegedLoadClass implements PrivilegedExceptionAction<Class<?>> { + + private final String className; + private final ClassLoader classLoader; + + public PrivilegedLoadClass(String className, ClassLoader classLoader) { + this.className = className; + this.classLoader = classLoader; + } + + @Override + public Class<?> run() throws Exception { + return loadClass(className, classLoader); + } + } } Modified: tomcat/trunk/java/org/apache/catalina/security/SecurityClassLoad.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/security/SecurityClassLoad.java?rev=1790202&r1=1790201&r2=1790202&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/security/SecurityClassLoad.java (original) +++ tomcat/trunk/java/org/apache/catalina/security/SecurityClassLoad.java Wed Apr 5 10:23:03 2017 @@ -58,19 +58,19 @@ public final class SecurityClassLoad { final String basePackage = "org.apache.catalina.core."; loader.loadClass (basePackage + - "AccessLogAdapter"); + "AccessLogAdapter"); loader.loadClass (basePackage + - "ApplicationContextFacade$PrivilegedExecuteMethod"); + "ApplicationContextFacade$PrivilegedExecuteMethod"); loader.loadClass (basePackage + - "ApplicationDispatcher$PrivilegedForward"); + "ApplicationDispatcher$PrivilegedForward"); loader.loadClass (basePackage + - "ApplicationDispatcher$PrivilegedInclude"); + "ApplicationDispatcher$PrivilegedInclude"); loader.loadClass (basePackage + - "ApplicationPushBuilder"); + "ApplicationPushBuilder"); loader.loadClass (basePackage + "AsyncContextImpl"); @@ -85,25 +85,25 @@ public final class SecurityClassLoad { "AsyncListenerWrapper"); loader.loadClass (basePackage + - "ContainerBase$PrivilegedAddChild"); + "ContainerBase$PrivilegedAddChild"); loader.loadClass (basePackage + - "DefaultInstanceManager$1"); + "DefaultInstanceManager$AnnotationCacheEntry"); loader.loadClass (basePackage + - "DefaultInstanceManager$2"); + "DefaultInstanceManager$AnnotationCacheEntryType"); loader.loadClass (basePackage + - "DefaultInstanceManager$3"); + "DefaultInstanceManager$PrivilegedGetField"); loader.loadClass (basePackage + - "DefaultInstanceManager$AnnotationCacheEntry"); + "DefaultInstanceManager$PrivilegedGetMethod"); loader.loadClass (basePackage + - "DefaultInstanceManager$AnnotationCacheEntryType"); + "DefaultInstanceManager$PrivilegedLoadClass"); loader.loadClass (basePackage + - "ApplicationHttpRequest$AttributeNamesEnumerator"); + "ApplicationHttpRequest$AttributeNamesEnumerator"); } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org