https://issues.apache.org/bugzilla/show_bug.cgi?id=56636

            Bug ID: 56636
           Summary: EL defineFunction method signature parser fails to
                    correctly match signatures to methods
           Product: Tomcat 8
           Version: trunk
          Hardware: PC
            Status: NEW
          Severity: normal
          Priority: P2
         Component: EL
          Assignee: dev@tomcat.apache.org
          Reporter: artfied...@gmail.com

Per the javadoc at
http://docs.oracle.com/javaee/7/api/javax/el/ELProcessor.html it specifies that
defineFunction(String prefix, String function, String className, String method)
should support method names (without parenthesis) and method signatures, it
gives an example of "int sum(int, int)"

The code I was using from 8.0.8 does not properly parse this example, in the
javax.el.ElProcessor.MethodSignature class the constructor first incorrectly
cuts off the last character of the method name by using
"methodName.substring(0, paramIndex -1)" second it continues to include the
return type in the name.

A better but not to java specification version would be to replace the
following code

int paramIndex = methodName.indexOf('(');

if (paramIndex == -1) {
    name = methodName.trim();
    parameterTypeNames = null;
} else {
    name = methodName.substring(0, paramIndex -1).trim();


with:

int paramIndex = methodName.indexOf('(');

if (paramIndex == -1) {
    name = methodName.trim();
    parameterTypeNames = null;
} else {
    String tmpName = methodName.substring(0, paramIndex).trim();
    int lastWhitespaceIndex = tmpName.lastIndexOf(' ');
    name = lastWhitespaceIndex > -1 ? tmpName.substring(lastWhitespaceIndex +
1) : tmpName;


This allows the MethodSignature class to return a proper method name that then
can be used in the ELProcessor.defineFunction method to compare the reflected
classes method names.

-- 
You are receiving this mail because:
You are the assignee for the bug.

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

Reply via email to