summaryrefslogtreecommitdiff
path: root/formula
diff options
context:
space:
mode:
authorEike Rathke <erack@redhat.com>2017-07-04 15:22:23 +0200
committerEike Rathke <erack@redhat.com>2017-07-04 15:22:52 +0200
commit209cc5c211260a6c20cc6fb5ac02fd5a88100314 (patch)
tree185a43f10c1986d359e94deec253b7243a775d2a /formula
parent4a77a818e0df010adcbefdcee0453ce0b16c0400 (diff)
Set error on more than max params (255) per function
Parameter count is size byte, so.. SUM(1,1,1,...) with 256 arguments resulted in 0 (uint8 wrapping around). Change-Id: Ib9997ad0d0d13d4c5171f276148b6c5cad570d5b
Diffstat (limited to 'formula')
-rw-r--r--formula/source/core/api/FormulaCompiler.cxx8
1 files changed, 6 insertions, 2 deletions
diff --git a/formula/source/core/api/FormulaCompiler.cxx b/formula/source/core/api/FormulaCompiler.cxx
index 2f82f3b022a6..389b2e719350 100644
--- a/formula/source/core/api/FormulaCompiler.cxx
+++ b/formula/source/core/api/FormulaCompiler.cxx
@@ -1490,7 +1490,7 @@ void FormulaCompiler::Factor()
}
else
SetError( FormulaError::PairExpected);
- sal_uInt8 nSepCount = 0;
+ sal_uInt32 nSepCount = 0;
const sal_uInt16 nSepPos = maArrIterator.GetIndex() - 1; // separator position, if any
if( !bNoParam )
{
@@ -1500,6 +1500,8 @@ void FormulaCompiler::Factor()
NextToken();
CheckSetForceArrayParameter( mpToken, nSepCount);
nSepCount++;
+ if (nSepCount > FORMULA_MAXPARAMS)
+ SetError( FormulaError::CodeOverflow);
eOp = Expression();
}
}
@@ -1597,7 +1599,7 @@ void FormulaCompiler::Factor()
}
else
SetError( FormulaError::PairExpected);
- sal_uInt8 nSepCount = 0;
+ sal_uInt32 nSepCount = 0;
if( !bNoParam )
{
nSepCount++;
@@ -1606,6 +1608,8 @@ void FormulaCompiler::Factor()
NextToken();
CheckSetForceArrayParameter( mpToken, nSepCount);
nSepCount++;
+ if (nSepCount > FORMULA_MAXPARAMS)
+ SetError( FormulaError::CodeOverflow);
eOp = Expression();
}
}