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 2019/10/04 21:17:31 UTC

[tomcat] 02/02: Fix NPEs when looking for static methods

This is an automated email from the ASF dual-hosted git repository.

markt pushed a commit to branch 7.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git

commit 0a06a40612c4ce3dc72f4cad5e66015e80e86511
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Fri Oct 4 21:23:42 2019 +0100

    Fix NPEs when looking for static methods
---
 java/javax/el/Util.java                     | 6 +++++-
 java/org/apache/el/util/ReflectionUtil.java | 6 +++++-
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/java/javax/el/Util.java b/java/javax/el/Util.java
index 7c91a5d..12cad7d 100644
--- a/java/javax/el/Util.java
+++ b/java/javax/el/Util.java
@@ -543,7 +543,11 @@ class Util {
      */
     static Method getMethod(Class<?> type, Object base, Method m) {
         JreCompat jreCompat = JreCompat.getInstance();
-        if (m == null || (Modifier.isPublic(type.getModifiers()) && jreCompat.canAcccess(base, m))) {
+        // If base is null, method MUST be static
+        // If base is non-null, method may be static or non-static
+        if (m == null ||
+                (Modifier.isPublic(type.getModifiers()) &&
+                        (jreCompat.canAcccess(base, m) || base != null && jreCompat.canAcccess(null, m)))) {
             return m;
         }
         Class<?>[] inf = type.getInterfaces();
diff --git a/java/org/apache/el/util/ReflectionUtil.java b/java/org/apache/el/util/ReflectionUtil.java
index 5b88de3..17cbd76 100644
--- a/java/org/apache/el/util/ReflectionUtil.java
+++ b/java/org/apache/el/util/ReflectionUtil.java
@@ -395,7 +395,11 @@ public class ReflectionUtil {
      */
     private static Method getMethod(Class<?> type, Object base, Method m) {
         JreCompat jreCompat = JreCompat.getInstance();
-        if (m == null || (Modifier.isPublic(type.getModifiers()) && jreCompat.canAcccess(base, m))) {
+        // If base is null, method MUST be static
+        // If base is non-null, method may be static or non-static
+        if (m == null ||
+                (Modifier.isPublic(type.getModifiers()) &&
+                        (jreCompat.canAcccess(base, m) || base != null && jreCompat.canAcccess(null, m)))) {
             return m;
         }
         Class<?>[] inf = type.getInterfaces();


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org