summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--formula/source/core/api/FormulaCompiler.cxx14
1 files changed, 14 insertions, 0 deletions
diff --git a/formula/source/core/api/FormulaCompiler.cxx b/formula/source/core/api/FormulaCompiler.cxx
index 6684fd17da47..b0e21b250377 100644
--- a/formula/source/core/api/FormulaCompiler.cxx
+++ b/formula/source/core/api/FormulaCompiler.cxx
@@ -1934,6 +1934,11 @@ void FormulaCompiler::Factor()
case ocIfNA:
nJumpMax = 2;
break;
+ case ocStop:
+ // May happen only if PutCode(pFacToken) ran into overflow.
+ nJumpMax = 0;
+ assert(pc == FORMULA_MAXTOKENS && pArr->GetCodeError() != FormulaError::NONE);
+ break;
default:
nJumpMax = 0;
SAL_WARN("formula.core","Jump OpCode: " << +eFacOpCode);
@@ -1973,6 +1978,14 @@ void FormulaCompiler::Factor()
case ocIfNA:
bLimitOk = (nJumpCount <= 2);
break;
+ case ocStop:
+ // May happen only if PutCode(pFacToken) ran into overflow.
+ // This may had resulted from a stacked token array and
+ // error wasn't propagated so assert only the program
+ // counter.
+ bLimitOk = false;
+ assert(pc == FORMULA_MAXTOKENS);
+ break;
default:
bLimitOk = false;
SAL_WARN("formula.core","Jump OpCode: " << +eFacOpCode);
@@ -2836,6 +2849,7 @@ void FormulaCompiler::PutCode( FormulaTokenRef& p )
{
if ( pc == FORMULA_MAXTOKENS - 1 )
{
+ SAL_WARN("formula.core", "FormulaCompiler::PutCode - CodeOverflow with OpCode " << +p->GetOpCode());
p = new FormulaByteToken( ocStop );
p->IncRef();
*pCode++ = p.get();