This is an automated email from the ASF dual-hosted git repository.

markt pushed a commit to branch 8.5.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git
commit 0610e67d41c77a961a064b6a50c9af67f9f253a3
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Thu May 20 13:19:01 2021 +0100

    Align with 10.0.x/9.0.x - avoid explicitly referenced anonymous classes
---
 .../catalina/core/DefaultInstanceManager.java      | 107 +++++++++++++--------
 .../catalina/security/SecurityClassLoad.java       |   4 +-
 2 files changed, 72 insertions(+), 39 deletions(-)

diff --git a/java/org/apache/catalina/core/DefaultInstanceManager.java 
b/java/org/apache/catalina/core/DefaultInstanceManager.java
index 1ca25e3..7dc2ba1 100644
--- a/java/org/apache/catalina/core/DefaultInstanceManager.java
+++ b/java/org/apache/catalina/core/DefaultInstanceManager.java
@@ -506,13 +506,8 @@ public class DefaultInstanceManager implements 
InstanceManager {
         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) {
@@ -675,22 +670,7 @@ public class DefaultInstanceManager implements 
InstanceManager {
             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(
@@ -706,21 +686,7 @@ public class DefaultInstanceManager implements 
InstanceManager {
             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());
@@ -799,7 +765,72 @@ public class DefaultInstanceManager implements 
InstanceManager {
         }
     }
 
+
     private 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);
+        }
+    }
 }
diff --git a/java/org/apache/catalina/security/SecurityClassLoad.java 
b/java/org/apache/catalina/security/SecurityClassLoad.java
index e19d7a2..2cc50bb 100644
--- a/java/org/apache/catalina/security/SecurityClassLoad.java
+++ b/java/org/apache/catalina/security/SecurityClassLoad.java
@@ -61,9 +61,11 @@ public final class SecurityClassLoad {
         loader.loadClass(basePackage + "AsyncContextImpl$DebugException");
         loader.loadClass(basePackage + "AsyncListenerWrapper");
         loader.loadClass(basePackage + "ContainerBase$PrivilegedAddChild");
-        loadAnonymousInnerClasses(loader, basePackage + 
"DefaultInstanceManager");
         loader.loadClass(basePackage + 
"DefaultInstanceManager$AnnotationCacheEntry");
         loader.loadClass(basePackage + 
"DefaultInstanceManager$AnnotationCacheEntryType");
+        loader.loadClass(basePackage + 
"DefaultInstanceManager$PrivilegedGetField");
+        loader.loadClass(basePackage + 
"DefaultInstanceManager$PrivilegedGetMethod");
+        loader.loadClass(basePackage + 
"DefaultInstanceManager$PrivilegedLoadClass");
         loader.loadClass(basePackage + 
"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