[Bug 58975] do not cast numberOfOperands to byte in AbstractFunctionPtg
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1800949 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
a33eef41a0
commit
a0aa8807b5
@ -17,6 +17,7 @@
|
|||||||
|
|
||||||
package org.apache.poi.ss.formula.functions;
|
package org.apache.poi.ss.formula.functions;
|
||||||
|
|
||||||
|
import org.apache.poi.ss.SpreadsheetVersion;
|
||||||
import org.apache.poi.ss.formula.ThreeDEval;
|
import org.apache.poi.ss.formula.ThreeDEval;
|
||||||
import org.apache.poi.ss.formula.TwoDEval;
|
import org.apache.poi.ss.formula.TwoDEval;
|
||||||
import org.apache.poi.ss.formula.eval.BlankEval;
|
import org.apache.poi.ss.formula.eval.BlankEval;
|
||||||
@ -81,7 +82,7 @@ public abstract class MultiOperandNumericFunction implements Function {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final int DEFAULT_MAX_NUM_OPERANDS = 30;
|
private static final int DEFAULT_MAX_NUM_OPERANDS = SpreadsheetVersion.EXCEL2007.getMaxFunctionArgs();
|
||||||
|
|
||||||
public final ValueEval evaluate(ValueEval[] args, int srcCellRow, int srcCellCol) {
|
public final ValueEval evaluate(ValueEval[] args, int srcCellRow, int srcCellCol) {
|
||||||
|
|
||||||
|
@ -41,12 +41,16 @@ public abstract class AbstractFunctionPtg extends OperationPtg {
|
|||||||
private final byte returnClass;
|
private final byte returnClass;
|
||||||
private final byte[] paramClass;
|
private final byte[] paramClass;
|
||||||
|
|
||||||
private final byte _numberOfArgs;
|
private final int _numberOfArgs;
|
||||||
private final short _functionIndex;
|
private final short _functionIndex;
|
||||||
|
|
||||||
protected AbstractFunctionPtg(int functionIndex, int pReturnClass, byte[] paramTypes, int nParams) {
|
protected AbstractFunctionPtg(int functionIndex, int pReturnClass, byte[] paramTypes, int nParams) {
|
||||||
_numberOfArgs = (byte) nParams;
|
_numberOfArgs = nParams;
|
||||||
|
if (functionIndex < Short.MIN_VALUE || functionIndex > Short.MAX_VALUE)
|
||||||
|
throw new RuntimeException("functionIndex " + functionIndex + " cannot be cast to short");
|
||||||
_functionIndex = (short) functionIndex;
|
_functionIndex = (short) functionIndex;
|
||||||
|
if (pReturnClass < Byte.MIN_VALUE || pReturnClass > Byte.MAX_VALUE)
|
||||||
|
throw new RuntimeException("pReturnClass " + pReturnClass + " cannot be cast to byte");
|
||||||
returnClass = (byte) pReturnClass;
|
returnClass = (byte) pReturnClass;
|
||||||
paramClass = paramTypes;
|
paramClass = paramTypes;
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,60 @@
|
|||||||
|
/* ====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
==================================================================== */
|
||||||
|
|
||||||
|
package org.apache.poi.ss.formula.ptg;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
|
||||||
|
import org.apache.poi.util.LittleEndianOutput;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
public class TestAbstractFunctionPtg {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testConstructor() {
|
||||||
|
FunctionPtg ptg = new FunctionPtg(1, 2, null, 255);
|
||||||
|
assertEquals(1, ptg.getFunctionIndex());
|
||||||
|
assertEquals(2, ptg.getDefaultOperandClass());
|
||||||
|
assertEquals(255, ptg.getNumberOfOperands());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected=RuntimeException.class)
|
||||||
|
public void testInvalidFunctionIndex() {
|
||||||
|
new FunctionPtg(40000, 2, null, 255);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected=RuntimeException.class)
|
||||||
|
public void testInvalidRuntimeClass() {
|
||||||
|
new FunctionPtg(1, 300, null, 255);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class FunctionPtg extends AbstractFunctionPtg {
|
||||||
|
|
||||||
|
protected FunctionPtg(int functionIndex, int pReturnClass,
|
||||||
|
byte[] paramTypes, int nParams) {
|
||||||
|
super(functionIndex, pReturnClass, paramTypes, nParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getSize() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void write(LittleEndianOutput out) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user