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

markt-asf pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/main by this push:
     new 16046e3b36 Follow up to "Use an instanceof check when instantiating 
..."
16046e3b36 is described below

commit 16046e3b3634246952732c77467599536d2f71bf
Author: Mark Thomas <[email protected]>
AuthorDate: Thu Oct 1 16:53:26 2026 +0100

    Follow up to "Use an instanceof check when instantiating ..."
    
    - Simplify
    - Add missing checks for other, similar code
---
 java/jakarta/el/ExpressionFactory.java                         |  2 +-
 .../security/auth/message/config/AuthConfigFactory.java        |  2 +-
 java/org/apache/catalina/authenticator/AuthenticatorBase.java  |  2 +-
 .../catalina/authenticator/jaspic/AuthConfigFactoryImpl.java   |  2 +-
 .../catalina/authenticator/jaspic/SimpleServerAuthConfig.java  |  3 ++-
 java/org/apache/catalina/filters/CsrfPreventionFilterBase.java | 10 ++--------
 java/org/apache/catalina/filters/RateLimitFilter.java          |  9 ++-------
 java/org/apache/catalina/realm/JAASMemoryLoginModule.java      |  2 +-
 java/org/apache/catalina/realm/RealmBase.java                  |  2 +-
 java/org/apache/catalina/startup/Tomcat.java                   |  5 +++--
 java/org/apache/catalina/valves/FilterValve.java               |  3 ++-
 java/org/apache/jasper/JspCompilationContext.java              |  2 +-
 12 files changed, 18 insertions(+), 26 deletions(-)

diff --git a/java/jakarta/el/ExpressionFactory.java 
b/java/jakarta/el/ExpressionFactory.java
index e327f7338b..65fe056ad6 100644
--- a/java/jakarta/el/ExpressionFactory.java
+++ b/java/jakarta/el/ExpressionFactory.java
@@ -160,7 +160,7 @@ public abstract class ExpressionFactory {
             Throwable cause = e.getCause();
             Util.handleThrowable(cause);
             throw new ELException(Util.message(null, 
"expressionFactory.cannotCreate", clazz.getName()), e);
-        } catch (ReflectiveOperationException | IllegalArgumentException e) {
+        } catch (ReflectiveOperationException | IllegalArgumentException | 
ClassCastException e) {
             throw new ELException(Util.message(null, 
"expressionFactory.cannotCreate", clazz.getName()), e);
         }
 
diff --git a/java/jakarta/security/auth/message/config/AuthConfigFactory.java 
b/java/jakarta/security/auth/message/config/AuthConfigFactory.java
index f8b740fde2..d35861e3ef 100644
--- a/java/jakarta/security/auth/message/config/AuthConfigFactory.java
+++ b/java/jakarta/security/auth/message/config/AuthConfigFactory.java
@@ -71,7 +71,7 @@ public abstract class AuthConfigFactory {
                         Class<?> clazz = Class.forName(className);
                         factory = (AuthConfigFactory) 
clazz.getConstructor().newInstance();
                     }
-                } catch (ReflectiveOperationException e) {
+                } catch (ReflectiveOperationException | ClassCastException e) {
                     Throwable cause = e.getCause() == null ? e : e.getCause();
                     throw new RuntimeException("AuthConfigFactory error:" + 
cause.getMessage(), cause);
                 }
diff --git a/java/org/apache/catalina/authenticator/AuthenticatorBase.java 
b/java/org/apache/catalina/authenticator/AuthenticatorBase.java
index f376a49fce..026a376d4b 100644
--- a/java/org/apache/catalina/authenticator/AuthenticatorBase.java
+++ b/java/org/apache/catalina/authenticator/AuthenticatorBase.java
@@ -1497,7 +1497,7 @@ public abstract class AuthenticatorBase extends ValveBase 
implements Authenticat
                 clazz = Class.forName(jaspicCallbackHandlerClass);
             }
             callbackHandler = (CallbackHandler) 
clazz.getConstructor().newInstance();
-        } catch (ReflectiveOperationException e) {
+        } catch (ReflectiveOperationException | ClassCastException e) {
             throw new SecurityException(e);
         }
 
diff --git 
a/java/org/apache/catalina/authenticator/jaspic/AuthConfigFactoryImpl.java 
b/java/org/apache/catalina/authenticator/jaspic/AuthConfigFactoryImpl.java
index 9563d5d9fa..b78130a0b4 100644
--- a/java/org/apache/catalina/authenticator/jaspic/AuthConfigFactoryImpl.java
+++ b/java/org/apache/catalina/authenticator/jaspic/AuthConfigFactoryImpl.java
@@ -191,7 +191,7 @@ public class AuthConfigFactoryImpl extends 
AuthConfigFactory {
             }
             Constructor<?> constructor = clazz.getConstructor(Map.class, 
AuthConfigFactory.class);
             provider = (AuthConfigProvider) 
constructor.newInstance(properties, null);
-        } catch (ReflectiveOperationException | IllegalArgumentException e) {
+        } catch (ReflectiveOperationException | IllegalArgumentException | 
ClassCastException e) {
             throw new SecurityException(e);
         }
         return provider;
diff --git 
a/java/org/apache/catalina/authenticator/jaspic/SimpleServerAuthConfig.java 
b/java/org/apache/catalina/authenticator/jaspic/SimpleServerAuthConfig.java
index 27c8eca20b..89a9dcd030 100644
--- a/java/org/apache/catalina/authenticator/jaspic/SimpleServerAuthConfig.java
+++ b/java/org/apache/catalina/authenticator/jaspic/SimpleServerAuthConfig.java
@@ -154,7 +154,8 @@ public class SimpleServerAuthConfig implements 
ServerAuthConfig {
                             ServerAuthModule module = (ServerAuthModule) 
clazz.getConstructor().newInstance();
                             module.initialize(null, null, handler, 
mergedProperties);
                             modules.add(module);
-                        } catch (ReflectiveOperationException | 
IllegalArgumentException | SecurityException e) {
+                        } catch (ReflectiveOperationException | 
IllegalArgumentException | SecurityException |
+                                ClassCastException e) {
                             throw new AuthException(e);
                         }
 
diff --git a/java/org/apache/catalina/filters/CsrfPreventionFilterBase.java 
b/java/org/apache/catalina/filters/CsrfPreventionFilterBase.java
index a899aa71da..fe23b8c452 100644
--- a/java/org/apache/catalina/filters/CsrfPreventionFilterBase.java
+++ b/java/org/apache/catalina/filters/CsrfPreventionFilterBase.java
@@ -87,14 +87,8 @@ public abstract class CsrfPreventionFilterBase extends 
FilterBase {
         super.init(filterConfig);
 
         try {
-            Class<?> clazz = Class.forName(randomClass);
-            Object instance = clazz.getConstructor().newInstance();
-            if (instance instanceof Random random) {
-                randomSource = random;
-            } else {
-                throw new 
ServletException(sm.getString("csrfPrevention.invalidRandomClass", 
randomClass));
-            }
-        } catch (ReflectiveOperationException e) {
+            randomSource = (Random) 
Class.forName(randomClass).getConstructor().newInstance();
+        } catch (ReflectiveOperationException | ClassCastException e) {
             throw new 
ServletException(sm.getString("csrfPrevention.invalidRandomClass", 
randomClass), e);
         }
     }
diff --git a/java/org/apache/catalina/filters/RateLimitFilter.java 
b/java/org/apache/catalina/filters/RateLimitFilter.java
index cefc14ebcb..5133bcb33f 100644
--- a/java/org/apache/catalina/filters/RateLimitFilter.java
+++ b/java/org/apache/catalina/filters/RateLimitFilter.java
@@ -254,13 +254,8 @@ public class RateLimitFilter extends FilterBase {
         super.init(filterConfig);
 
         try {
-            Object instance = 
Class.forName(rateLimitClassName).getConstructor().newInstance();
-            if (instance instanceof RateLimiter limiter) {
-                rateLimiter = limiter;
-            } else {
-                throw new 
ServletException(sm.getString("rateLimitFilter.classNotFound", 
rateLimitClassName));
-            }
-        } catch (ReflectiveOperationException e) {
+            rateLimiter = (RateLimiter) 
Class.forName(rateLimitClassName).getConstructor().newInstance();
+        } catch (ReflectiveOperationException | ClassCastException e) {
             throw new 
ServletException(sm.getString("rateLimitFilter.classNotFound", 
rateLimitClassName), e);
         }
 
diff --git a/java/org/apache/catalina/realm/JAASMemoryLoginModule.java 
b/java/org/apache/catalina/realm/JAASMemoryLoginModule.java
index 7dca65e684..2a805cff3d 100644
--- a/java/org/apache/catalina/realm/JAASMemoryLoginModule.java
+++ b/java/org/apache/catalina/realm/JAASMemoryLoginModule.java
@@ -214,7 +214,7 @@ public class JAASMemoryLoginModule extends MemoryRealm 
implements LoginModule {
             try {
                 Class<?> clazz = Class.forName((String) option);
                 credentialHandler = (CredentialHandler) 
clazz.getConstructor().newInstance();
-            } catch (ReflectiveOperationException e) {
+            } catch (ReflectiveOperationException | ClassCastException e) {
                 throw new IllegalArgumentException(e);
             }
         }
diff --git a/java/org/apache/catalina/realm/RealmBase.java 
b/java/org/apache/catalina/realm/RealmBase.java
index 389a193962..4866ddc40f 100644
--- a/java/org/apache/catalina/realm/RealmBase.java
+++ b/java/org/apache/catalina/realm/RealmBase.java
@@ -1448,7 +1448,7 @@ public abstract class RealmBase extends 
LifecycleMBeanBase implements Realm {
                 Class<?> clazz = Class.forName(handlerClassName);
                 handler = (DigestCredentialHandlerBase) 
clazz.getConstructor().newInstance();
                 IntrospectionUtils.setProperty(handler, "algorithm", 
algorithm);
-            } catch (ReflectiveOperationException e) {
+            } catch (ReflectiveOperationException | ClassCastException e) {
                 throw new RuntimeException(e);
             }
         }
diff --git a/java/org/apache/catalina/startup/Tomcat.java 
b/java/org/apache/catalina/startup/Tomcat.java
index 135b41d4a2..fadc49f262 100644
--- a/java/org/apache/catalina/startup/Tomcat.java
+++ b/java/org/apache/catalina/startup/Tomcat.java
@@ -691,7 +691,7 @@ public class Tomcat {
         try {
             Class<?> clazz = Class.forName((host != null ? host : 
getHost()).getConfigClass());
             listener = (LifecycleListener) 
clazz.getConstructor().newInstance();
-        } catch (ReflectiveOperationException e) {
+        } catch (ReflectiveOperationException | ClassCastException e) {
             // Wrap in IAE since we can't easily change the method signature
             // to throw the specific checked exceptions
             throw new IllegalArgumentException(e);
@@ -976,7 +976,8 @@ public class Tomcat {
                 return (Context) 
Class.forName(contextClass).getConstructor().newInstance();
             }
 
-        } catch (ReflectiveOperationException | IllegalArgumentException | 
SecurityException e) {
+        } catch (ReflectiveOperationException | IllegalArgumentException | 
SecurityException |
+                ClassCastException e) {
             throw new 
IllegalArgumentException(sm.getString("tomcat.noContextClass", contextClass, 
host, url), e);
         }
     }
diff --git a/java/org/apache/catalina/valves/FilterValve.java 
b/java/org/apache/catalina/valves/FilterValve.java
index 2d2203a908..015fe0a582 100644
--- a/java/org/apache/catalina/valves/FilterValve.java
+++ b/java/org/apache/catalina/valves/FilterValve.java
@@ -199,7 +199,8 @@ public class FilterValve extends ValveBase implements 
FilterConfig {
 
             filter.init(this);
         } catch (ServletException | InstantiationException | 
IllegalAccessException | IllegalArgumentException |
-                InvocationTargetException | NoSuchMethodException | 
SecurityException | ClassNotFoundException se) {
+                InvocationTargetException | NoSuchMethodException | 
SecurityException | ClassNotFoundException |
+                ClassCastException se) {
             throw new LifecycleException(sm.getString("filterValve.initError", 
getFilterClassName()), se);
         }
     }
diff --git a/java/org/apache/jasper/JspCompilationContext.java 
b/java/org/apache/jasper/JspCompilationContext.java
index 8d246b6f05..4466f85e00 100644
--- a/java/org/apache/jasper/JspCompilationContext.java
+++ b/java/org/apache/jasper/JspCompilationContext.java
@@ -276,7 +276,7 @@ public class JspCompilationContext {
             if (log.isDebugEnabled()) {
                 log.debug(Localizer.getMessage("jsp.error.compiler"), e);
             }
-        } catch (ReflectiveOperationException e) {
+        } catch (ReflectiveOperationException | ClassCastException e) {
             log.warn(Localizer.getMessage("jsp.error.compiler"), e);
         }
         return compiler;


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to