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/10/04 18:47:33 UTC
[tomcat] branch main updated: Follow-up to 7c630a7
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 683d32e Follow-up to 7c630a7
683d32e is described below
commit 683d32e2f06938af4985b8e1f3e672f71e02b121
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Mon Oct 4 19:47:15 2021 +0100
Follow-up to 7c630a7
Fix a few tests that need correcting.
Restore some checks to ELResolvers that need them.
---
java/jakarta/el/BeanNameELResolver.java | 3 ++-
java/jakarta/el/StaticFieldELResolver.java | 27 ++++++++++++++++++--------
test/jakarta/el/TestBeanELResolver.java | 3 ++-
test/jakarta/el/TestStaticFieldELResolver.java | 8 ++++----
4 files changed, 27 insertions(+), 14 deletions(-)
diff --git a/java/jakarta/el/BeanNameELResolver.java b/java/jakarta/el/BeanNameELResolver.java
index ad65ccf..27bc01a 100644
--- a/java/jakarta/el/BeanNameELResolver.java
+++ b/java/jakarta/el/BeanNameELResolver.java
@@ -104,6 +104,7 @@ public class BeanNameELResolver extends ELResolver {
try {
if (beanNameResolver.isNameResolved(beanName)) {
+ Class<?> result = beanNameResolver.getBean(beanName).getClass();
context.setPropertyResolved(base, property);
/*
@@ -113,7 +114,7 @@ public class BeanNameELResolver extends ELResolver {
return null;
}
- return beanNameResolver.getBean(beanName).getClass();
+ return result;
}
} catch (Throwable t) {
Util.handleThrowable(t);
diff --git a/java/jakarta/el/StaticFieldELResolver.java b/java/jakarta/el/StaticFieldELResolver.java
index e164e9d..d0de03c 100644
--- a/java/jakarta/el/StaticFieldELResolver.java
+++ b/java/jakarta/el/StaticFieldELResolver.java
@@ -149,15 +149,26 @@ public class StaticFieldELResolver extends ELResolver {
Class<?> clazz = ((ELClass) base).getKlass();
String name = (String) property;
+ Exception exception = null;
try {
- clazz.getField(name);
- /*
- * This resolver is always read-only so fall-through to return
- * null.
- */
- } catch (IllegalArgumentException | NoSuchFieldException | SecurityException e) {
- String msg = Util.message(context, "staticFieldELResolver.notFound", name, clazz.getName());
- throw new PropertyNotFoundException(msg, e);
+ Field field = clazz.getField(name);
+ int modifiers = field.getModifiers();
+ if (Modifier.isStatic(modifiers) &&
+ Modifier.isPublic(modifiers) &&
+ Util.canAccess(null, field)) {
+ // Resolver is read-only so returns null for resolved fields
+ return null;
+ }
+ } catch (IllegalArgumentException | NoSuchFieldException |
+ SecurityException e) {
+ exception = e;
+ }
+ String msg = Util.message(context, "staticFieldELResolver.notFound",
+ name, clazz.getName());
+ if (exception == null) {
+ throw new PropertyNotFoundException(msg);
+ } else {
+ throw new PropertyNotFoundException(msg, exception);
}
}
return null;
diff --git a/test/jakarta/el/TestBeanELResolver.java b/test/jakarta/el/TestBeanELResolver.java
index 5da3667..864e1a7 100644
--- a/test/jakarta/el/TestBeanELResolver.java
+++ b/test/jakarta/el/TestBeanELResolver.java
@@ -97,7 +97,8 @@ public class TestBeanELResolver {
Class<?> result = resolver.getType(context, new Bean(), PROPERTY01_NAME);
- Assert.assertEquals(String.class, result);
+ // Property is read-only so should return null
+ Assert.assertNull(result);
Assert.assertTrue(context.isPropertyResolved());
}
diff --git a/test/jakarta/el/TestStaticFieldELResolver.java b/test/jakarta/el/TestStaticFieldELResolver.java
index 4e97a24..006d737 100644
--- a/test/jakarta/el/TestStaticFieldELResolver.java
+++ b/test/jakarta/el/TestStaticFieldELResolver.java
@@ -240,8 +240,8 @@ public class TestStaticFieldELResolver {
Class<?> result = resolver.getType(context, new ELClass(
TesterClass.class), PROPERTY01_NAME);
- Assert.assertEquals(PROPERTY01_NAME.getClass(), result);
- Assert.assertTrue(context.isPropertyResolved());
+ // Resolver is read-only so this should return null
+ Assert.assertNull(result);
}
/**
@@ -305,8 +305,8 @@ public class TestStaticFieldELResolver {
Class<?> result = resolver.getType(context, new ELClass(
MethodUnderTest.class), MethodUnderTest.GET_TYPE.toString());
- Assert.assertEquals(MethodUnderTest.GET_TYPE.getClass(), result);
- Assert.assertTrue(context.isPropertyResolved());
+ // Resolver is read-only so this should return null
+ Assert.assertNull(result);
}
/**
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org