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