You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2021/07/28 14:38:18 UTC
[tomcat] branch main updated: Fix failing tests. JreCompat caught
IAE for canAccess() so do the same
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-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org