https://bz.apache.org/bugzilla/show_bug.cgi?id=66419
Bug ID: 66419
Summary: Function with varargs argument fails for single
argument
Product: Tomcat 9
Version: 9.0.65
Hardware: PC
Status: NEW
Severity: normal
Priority: P2
Component: EL
Assignee: [email protected]
Reporter: [email protected]
Target Milestone: -----
Function with varargs argument fails for a single argument. The problem was
introduced by fix of bug 60431. The single argument is always coerced into
array which fails for non-array argument. The reason is the test for array type
is done on methods argument which is always array instead of actual argument
type.
The code in question - AstFunction.getValue:
} else if (inputParameterCount == methodParameterCount &&
paramTypes[i].isArray()) {
params[i] = parameters.jjtGetChild(i).getValue(ctx);
Following test should pass but fails on the third expression:
@Test
public void testVarargMethod() throws NoSuchMethodException,
SecurityException {
ExpressionFactory factory = ExpressionFactory.newInstance();
ELContext context = new StandardELContext(factory);
context.getFunctionMapper().mapFunction("fn", "format",
String.class.getMethod("format",String.class, Object[].class));
Object result = factory.createValueExpression(context,
"${fn:format('%s-%s','one','two')}",
String.class).getValue(context);
Assert.assertEquals("one-two",result);
result = factory.createValueExpression(context,
"${fn:format('%s-%s','one,two'.split(','))}",
String.class).getValue(context);
Assert.assertEquals("one-two",result);
result = factory.createValueExpression(context,
"${fn:format('%s','one')}",
String.class).getValue(context);
Assert.assertEquals("one",result);
}
--
You are receiving this mail because:
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]