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-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org