This is an automated email from the ASF dual-hosted git repository. markt 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 d26f48d Fix failing tests. JreCompat caught IAE for canAccess() so do the same d26f48d is described below commit d26f48db6c18c786158514536b044bef4d05fa0a Author: Mark Thomas <ma...@apache.org> AuthorDate: Wed Jul 28 15:18:27 2021 +0100 Fix failing tests. JreCompat caught IAE for canAccess() so do the same --- java/jakarta/el/ELProcessor.java | 6 +++--- java/jakarta/el/StaticFieldELResolver.java | 4 ++-- java/jakarta/el/Util.java | 14 ++++++++++++-- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/java/jakarta/el/ELProcessor.java b/java/jakarta/el/ELProcessor.java index 61d8a2a..107bd23 100644 --- a/java/jakarta/el/ELProcessor.java +++ b/java/jakarta/el/ELProcessor.java @@ -118,7 +118,7 @@ public class ELProcessor { if (!Modifier.isStatic(method.getModifiers())) { continue; } - if (!method.canAccess(null)) { + if (!Util.canAccess(null, method)) { continue; } if (method.getName().equals(sig.getName())) { @@ -191,8 +191,8 @@ public class ELProcessor { int modifiers = method.getModifiers(); - // Check for static, public method and module access for Java 9+ - if (!Modifier.isStatic(modifiers) || !method.canAccess(null)) { + // Check for static, public method and module access + if (!Modifier.isStatic(modifiers) || !Util.canAccess(null, method)) { throw new NoSuchMethodException(Util.message(context, "elProcessor.defineFunctionInvalidMethod", method.getName(), method.getDeclaringClass().getName())); diff --git a/java/jakarta/el/StaticFieldELResolver.java b/java/jakarta/el/StaticFieldELResolver.java index 4da5c8f..6722c7a 100644 --- a/java/jakarta/el/StaticFieldELResolver.java +++ b/java/jakarta/el/StaticFieldELResolver.java @@ -45,7 +45,7 @@ public class StaticFieldELResolver extends ELResolver { int modifiers = field.getModifiers(); if (Modifier.isStatic(modifiers) && Modifier.isPublic(modifiers) && - field.canAccess(null)) { + Util.canAccess(null, field)) { return field.get(null); } } catch (IllegalArgumentException | IllegalAccessException | @@ -158,7 +158,7 @@ public class StaticFieldELResolver extends ELResolver { int modifiers = field.getModifiers(); if (Modifier.isStatic(modifiers) && Modifier.isPublic(modifiers) && - field.canAccess(null)) { + Util.canAccess(null, field)) { return field.getType(); } } catch (IllegalArgumentException | NoSuchFieldException | diff --git a/java/jakarta/el/Util.java b/java/jakarta/el/Util.java index 3bfd267..880c1db 100644 --- a/java/jakarta/el/Util.java +++ b/java/jakarta/el/Util.java @@ -17,6 +17,7 @@ package jakarta.el; import java.lang.ref.WeakReference; +import java.lang.reflect.AccessibleObject; import java.lang.reflect.Array; import java.lang.reflect.Constructor; import java.lang.reflect.Method; @@ -547,7 +548,7 @@ class Util { // If base is non-null, method may be static or non-static if (m == null || (Modifier.isPublic(type.getModifiers()) && - (m.canAccess(base) || base != null && m.canAccess(null)))) { + (canAccess(base, m) || base != null && canAccess(null, m)))) { return m; } Class<?>[] interfaces = type.getInterfaces(); @@ -602,7 +603,7 @@ class Util { Constructor<?> constructor = wrapper.unWrap(); - if (!Modifier.isPublic(clazz.getModifiers()) || !constructor.canAccess(null)) { + if (!Modifier.isPublic(clazz.getModifiers()) || !canAccess(null, constructor)) { throw new MethodNotFoundException(message( null, "util.method.notfound", clazz, methodName, paramString(paramTypes))); @@ -612,6 +613,15 @@ class Util { } + static boolean canAccess(Object base, AccessibleObject accessibleObject) { + try { + return accessibleObject.canAccess(base); + } catch (IllegalArgumentException iae) { + return false; + } + } + + static Object[] buildParameters(Class<?>[] parameterTypes, boolean isVarArgs,Object[] params) { ExpressionFactory factory = getExpressionFactory(); --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org