Author: fanningpj
Date: Wed Jul  5 22:56:32 2017
New Revision: 1800949

URL: http://svn.apache.org/viewvc?rev=1800949&view=rev
Log:
[Bug 58975] do not cast numberOfOperands to byte in AbstractFunctionPtg

Added:
    
poi/trunk/src/testcases/org/apache/poi/ss/formula/ptg/TestAbstractFunctionPtg.java
   (with props)
Modified:
    
poi/trunk/src/java/org/apache/poi/ss/formula/functions/MultiOperandNumericFunction.java
    poi/trunk/src/java/org/apache/poi/ss/formula/ptg/AbstractFunctionPtg.java

Modified: 
poi/trunk/src/java/org/apache/poi/ss/formula/functions/MultiOperandNumericFunction.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/functions/MultiOperandNumericFunction.java?rev=1800949&r1=1800948&r2=1800949&view=diff
==============================================================================
--- 
poi/trunk/src/java/org/apache/poi/ss/formula/functions/MultiOperandNumericFunction.java
 (original)
+++ 
poi/trunk/src/java/org/apache/poi/ss/formula/functions/MultiOperandNumericFunction.java
 Wed Jul  5 22:56:32 2017
@@ -17,6 +17,7 @@
 
 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.TwoDEval;
 import org.apache.poi.ss.formula.eval.BlankEval;
@@ -81,7 +82,7 @@ public abstract class MultiOperandNumeri
                }
        }
 
-       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) {
 

Modified: 
poi/trunk/src/java/org/apache/poi/ss/formula/ptg/AbstractFunctionPtg.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/AbstractFunctionPtg.java?rev=1800949&r1=1800948&r2=1800949&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/AbstractFunctionPtg.java 
(original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/AbstractFunctionPtg.java 
Wed Jul  5 22:56:32 2017
@@ -41,12 +41,16 @@ public abstract class AbstractFunctionPt
     private final byte returnClass;
     private final byte[] paramClass;
 
-    private final byte _numberOfArgs;
+    private final int _numberOfArgs;
     private final short _functionIndex;
 
     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;
+        if (pReturnClass < Byte.MIN_VALUE || pReturnClass > Byte.MAX_VALUE)
+            throw new RuntimeException("pReturnClass " + pReturnClass + " 
cannot be cast to byte");
         returnClass = (byte) pReturnClass;
         paramClass = paramTypes;
     }

Added: 
poi/trunk/src/testcases/org/apache/poi/ss/formula/ptg/TestAbstractFunctionPtg.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/ss/formula/ptg/TestAbstractFunctionPtg.java?rev=1800949&view=auto
==============================================================================
--- 
poi/trunk/src/testcases/org/apache/poi/ss/formula/ptg/TestAbstractFunctionPtg.java
 (added)
+++ 
poi/trunk/src/testcases/org/apache/poi/ss/formula/ptg/TestAbstractFunctionPtg.java
 Wed Jul  5 22:56:32 2017
@@ -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) {
+            
+        }
+    }
+}

Propchange: 
poi/trunk/src/testcases/org/apache/poi/ss/formula/ptg/TestAbstractFunctionPtg.java
------------------------------------------------------------------------------
    svn:eol-style = native



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to