Author: markt
Date: Mon Apr 27 09:45:12 2015
New Revision: 1676231
URL: http://svn.apache.org/r1676231
Log:
Fix https://bz.apache.org/bugzilla/show_bug.cgi?id=57855
Explicitly handle the case where a MethodExpression is invoked with null or the
wrong number of parameters. Rather than failing with
ArrayIndexOutOfBoundsException or NullPointerException throw an
IllegalArgumentException with a useful error message.
Modified:
tomcat/trunk/java/org/apache/el/Messages.properties
tomcat/trunk/java/org/apache/el/parser/AstValue.java
tomcat/trunk/test/org/apache/el/TestMethodExpressionImpl.java
Modified: tomcat/trunk/java/org/apache/el/Messages.properties
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/el/Messages.properties?rev=1676231&r1=1676230&r2=1676231&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/el/Messages.properties (original)
+++ tomcat/trunk/java/org/apache/el/Messages.properties Mon Apr 27 09:45:12 2015
@@ -21,6 +21,8 @@ error.unreachable.base=Target Unreachabl
error.unreachable.property=Target Unreachable, ''{0}'' returned null
error.resolver.unhandled=ELResolver did not handle type: {0} with property of
''{1}''
error.resolver.unhandled.null=ELResolver cannot handle a null base Object with
identifier ''{0}''
+error.invoke.wrongParams=The method [{0}] was called with [{1}] parameter(s)
when it expected [{2}]
+error.invoke.tooFewParams=The method [{0}] was called with [{1}] parameter(s)
when it expected at least [{2}]
# ValueExpressionLiteral
error.value.literal.write=ValueExpression is a literal and not writable: {0}
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=1676231&r1=1676230&r2=1676231&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/el/parser/AstValue.java (original)
+++ tomcat/trunk/java/org/apache/el/parser/AstValue.java Mon Apr 27 09:45:12
2015
@@ -237,7 +237,7 @@ public final class AstValue extends Simp
}
m = ReflectionUtil.getMethod(ctx, t.base, t.property, types, values);
- // Handle varArgs and any co-ercion required
+ // Handle varArgs and any coercion required
values = convertArgs(ctx, values, m);
Object result = null;
@@ -268,6 +268,24 @@ 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) {
+ String inputParamCount = null;
+ if (src != null) {
+ inputParamCount = Integer.toString(src.length);
+ }
+ String msg;
+ if (m.isVarArgs()) {
+ msg = MessageFactory.get("error.invoke.tooFewParams",
+ m.getName(), inputParamCount,
Integer.toString(paramCount));
+ } else {
+ msg = MessageFactory.get("error.invoke.wrongParams",
+ m.getName(), inputParamCount,
Integer.toString(paramCount));
+ }
+ throw new IllegalArgumentException(msg);
+ }
+
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=1676231&r1=1676230&r2=1676231&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/el/TestMethodExpressionImpl.java (original)
+++ tomcat/trunk/test/org/apache/el/TestMethodExpressionImpl.java Mon Apr 27
09:45:12 2015
@@ -482,4 +482,20 @@ public class TestMethodExpressionImpl {
Object r = me.invoke(context, null);
assertEquals("AA2Hello World!", r.toString());
}
+
+
+ @Test(expected=IllegalArgumentException.class)
+ public void testBug57855a() {
+ MethodExpression me = factory.createMethodExpression(context,
+ "${beanAA.echo2}", null , new Class[]{String.class});
+ me.invoke(context, new Object[0]);
+ }
+
+
+ @Test(expected=IllegalArgumentException.class)
+ public void testBug57855b() {
+ MethodExpression me = factory.createMethodExpression(context,
+ "${beanAA.echo2}", null , new Class[]{String.class});
+ me.invoke(context, null);
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]