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: [email protected]
For additional commands, e-mail: [email protected]