Author: markt
Date: Mon Apr 27 21:43:22 2015
New Revision: 1676381

URL: http://svn.apache.org/r1676381
Log:
Further fix for https://bz.apache.org/bugzilla/show_bug.cgi?id=57855
Follow-up to r1676231
Handle case where null is passed to a method with a single varargs parameter

Modified:
    tomcat/trunk/java/org/apache/el/parser/AstValue.java
    tomcat/trunk/test/org/apache/el/TestMethodExpressionImpl.java
    tomcat/trunk/test/org/apache/el/TesterBeanB.java

Modified: tomcat/trunk/java/org/apache/el/parser/AstValue.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/el/parser/AstValue.java?rev=1676381&r1=1676380&r2=1676381&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/el/parser/AstValue.java (original)
+++ tomcat/trunk/java/org/apache/el/parser/AstValue.java Mon Apr 27 21:43:22 
2015
@@ -268,9 +268,9 @@ public final class AstValue extends Simp
 
         int paramCount = types.length;
 
-        if (paramCount > 0 && src == null ||
-                m.isVarArgs() && src.length < paramCount ||
-                !m.isVarArgs() && src.length != paramCount) {
+        if (m.isVarArgs() && paramCount > 1 && (src == null || paramCount > 
src.length) ||
+                !m.isVarArgs() && (paramCount > 0 && src == null ||
+                        src != null && src.length != paramCount)) {
             String inputParamCount = null;
             if (src != null) {
                 inputParamCount = Integer.toString(src.length);
@@ -286,6 +286,10 @@ public final class AstValue extends Simp
             throw new IllegalArgumentException(msg);
         }
 
+        if (src == null) {
+            return new Object[1];
+        }
+
         Object[] dest = new Object[paramCount];
 
         for (int i = 0; i < paramCount - 1; i++) {

Modified: tomcat/trunk/test/org/apache/el/TestMethodExpressionImpl.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/el/TestMethodExpressionImpl.java?rev=1676381&r1=1676380&r2=1676381&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/el/TestMethodExpressionImpl.java (original)
+++ tomcat/trunk/test/org/apache/el/TestMethodExpressionImpl.java Mon Apr 27 
21:43:22 2015
@@ -498,4 +498,28 @@ public class TestMethodExpressionImpl {
                 "${beanAA.echo2}", null , new Class[]{String.class});
         me.invoke(context, null);
     }
+
+    @Test
+    public void testBug57855c() {
+        MethodExpression me = factory.createMethodExpression(context,
+                "${beanB.echo}", null , new Class[]{String.class});
+        me.invoke(context, null);
+    }
+
+
+    @Test
+    public void testBug57855d() {
+        MethodExpression me = factory.createMethodExpression(context,
+                "${beanB.echo}", null , new Class[]{String.class});
+        Object r = me.invoke(context, new String[] { "aaa" });
+        assertEquals("aaa", r.toString());
+    }
+    @Test
+    public void testBug57855e() {
+        MethodExpression me = factory.createMethodExpression(context,
+                "${beanB.echo}", null , new Class[]{String.class});
+        Object r = me.invoke(context, new String[] { "aaa", "bbb" });
+        assertEquals("aaa, bbb", r.toString());
+    }
+
 }

Modified: tomcat/trunk/test/org/apache/el/TesterBeanB.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/el/TesterBeanB.java?rev=1676381&r1=1676380&r2=1676381&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/el/TesterBeanB.java (original)
+++ tomcat/trunk/test/org/apache/el/TesterBeanB.java Mon Apr 27 21:43:22 2015
@@ -35,4 +35,19 @@ public class TesterBeanB {
     public String sayHello(String to) {
         return "Hello " + to + " from " + name;
     }
+
+    public String echo(String...strings) {
+        if (strings == null) {
+            return null;
+        }
+
+        StringBuilder sb = new StringBuilder();
+        for (int i = 0; i < strings.length; i++) {
+            if (i > 0) {
+                sb.append(", ");
+            }
+            sb.append(strings[i]);
+        }
+        return sb.toString();
+    }
 }



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

Reply via email to