Konstantin,

On 4/27/15 6:06 PM, Konstantin Kolinko wrote:
> 2015-04-28 0:43 GMT+03:00  <ma...@apache.org>:
>> 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];
> 
> Did you mean "new Object[0]" here?
> 
> Javadoc for Method.invoke() (as linked from comment 5 in BZ) says that
> "If the number of formal parameters required by the underlying method
> is 0, the supplied args array may be of length 0 or null."
> 
> It may be that you need the array if the method is a varargs one (I
> have not tested), but if it is not a varargs one then allocating the
> array should not be necessary, I guess.

... and if it can be "new Object[0]" then you can re-use the same
zero-length array for all such calls if you want to avoid an object
allocation.

-chris

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to