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:29 UTC

[tomcat] branch 7.0.x updated (b4331ea -> 0a06a40)

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

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


    from b4331ea  Update changelog
     new e3422cb  Back-port TestUtil from 8.5.x
     new 0a06a40  Fix NPEs when looking for static methods

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 java/javax/el/Util.java                     |  6 +++-
 java/org/apache/el/util/ReflectionUtil.java |  6 +++-
 test/javax/el/TestUtil.java                 | 55 +++++++++++++++++++++++++++++
 3 files changed, 65 insertions(+), 2 deletions(-)
 create mode 100644 test/javax/el/TestUtil.java


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


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

Posted by ma...@apache.org.
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


[tomcat] 01/02: Back-port TestUtil from 8.5.x

Posted by ma...@apache.org.
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 e3422cb244f5b1b764a9211aa6f4ec813094d40e
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Fri Oct 4 22:14:40 2019 +0100

    Back-port TestUtil from 8.5.x
---
 test/javax/el/TestUtil.java | 55 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 55 insertions(+)

diff --git a/test/javax/el/TestUtil.java b/test/javax/el/TestUtil.java
new file mode 100644
index 0000000..354ce8f
--- /dev/null
+++ b/test/javax/el/TestUtil.java
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package javax.el;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import org.apache.jasper.el.ELContextImpl;
+
+public class TestUtil {
+
+    @Test
+    public void testBug56425a() {
+        ELProcessor processor = new ELProcessor();
+        processor.defineBean("string", "a-b-c-d");
+        Assert.assertEquals("a_b_c_d", processor.eval("string.replace(\"-\",\"_\")"));
+    }
+
+    @Test
+    public void testBug56425b() {
+        ELProcessor processor = new ELProcessor();
+        processor.defineBean("string", "Not used. Any value is fine here");
+        Assert.assertEquals("5", processor.eval("string.valueOf(5)"));
+    }
+
+
+    private static class ELProcessor {
+        private final ExpressionFactory factory = ExpressionFactory.newInstance();
+        private final ELContext context = new ELContextImpl();
+
+        public void defineBean(String name, Object bean) {
+            ValueExpression varBean = factory.createValueExpression(bean, bean.getClass());
+            context.getVariableMapper().setVariable(name, varBean);
+        }
+
+        public Object eval(String expression) {
+            ValueExpression ve = factory.createValueExpression(context, "${" + expression + "}", Object.class);
+            return ve.getValue(context);
+        }
+    }
+}


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