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: [email protected]
For additional commands, e-mail: [email protected]