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