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

Reply via email to