summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sc/source/filter/inc/formulaparser.hxx2
-rw-r--r--sc/source/filter/oox/formulaparser.cxx15
2 files changed, 9 insertions, 8 deletions
diff --git a/sc/source/filter/inc/formulaparser.hxx b/sc/source/filter/inc/formulaparser.hxx
index 33135ab0e5d3..cc6101866285 100644
--- a/sc/source/filter/inc/formulaparser.hxx
+++ b/sc/source/filter/inc/formulaparser.hxx
@@ -80,7 +80,7 @@ private:
const ApiToken* skipParentheses( const ApiToken* pToken, const ApiToken* pTokenEnd ) const;
const ApiToken* findParameters( ParameterPosVector& rParams, const ApiToken* pToken, const ApiToken* pTokenEnd ) const;
void appendEmptyParameter( const FunctionInfo& rFuncInfo, size_t nParam );
- void appendCalcOnlyParameter( const FunctionInfo& rFuncInfo, size_t nParam );
+ void appendCalcOnlyParameter( const FunctionInfo& rFuncInfo, size_t nParam, size_t nParamCount );
void appendRequiredParameters( const FunctionInfo& rFuncInfo, size_t nParamCount );
bool appendFinalToken( const ApiToken& rToken );
diff --git a/sc/source/filter/oox/formulaparser.cxx b/sc/source/filter/oox/formulaparser.cxx
index cf79c711e8ef..f6f2948e9042 100644
--- a/sc/source/filter/oox/formulaparser.cxx
+++ b/sc/source/filter/oox/formulaparser.cxx
@@ -223,7 +223,7 @@ const ApiToken* FormulaFinalizer::processParameters(
// add embedded Calc-only parameters
if( aParamInfoIt.isCalcOnlyParam() )
{
- appendCalcOnlyParameter( *pRealFuncInfo, nParam );
+ appendCalcOnlyParameter( *pRealFuncInfo, nParam, nParamCount );
while( aParamInfoIt.isCalcOnlyParam() ) ++aParamInfoIt;
}
@@ -274,7 +274,7 @@ const ApiToken* FormulaFinalizer::processParameters(
// add trailing Calc-only parameters
if( aParamInfoIt.isCalcOnlyParam() )
- appendCalcOnlyParameter( *pRealFuncInfo, nLastValidCount );
+ appendCalcOnlyParameter( *pRealFuncInfo, nLastValidCount, nParamCount );
// add optional parameters that are required in Calc
appendRequiredParameters( *pRealFuncInfo, nLastValidCount );
@@ -381,16 +381,17 @@ void FormulaFinalizer::appendEmptyParameter( const FunctionInfo& rFuncInfo, size
maTokens.append( OPCODE_MISSING );
}
-void FormulaFinalizer::appendCalcOnlyParameter( const FunctionInfo& rFuncInfo, size_t nParam )
+void FormulaFinalizer::appendCalcOnlyParameter( const FunctionInfo& rFuncInfo, size_t nParam, size_t nParamCount )
{
- (void)nParam; // prevent 'unused' warning
switch( rFuncInfo.mnBiff12FuncId )
{
case BIFF_FUNC_FLOOR:
case BIFF_FUNC_CEILING:
- OSL_ENSURE( nParam == 2, "FormulaFinalizer::appendCalcOnlyParameter - unexpected parameter index" );
- maTokens.append< double >( OPCODE_PUSH, 1.0 );
- maTokens.append( OPCODE_SEP );
+ if (nParam == 2 && nParamCount < 3)
+ {
+ maTokens.append< double >( OPCODE_PUSH, 1.0 );
+ maTokens.append( OPCODE_SEP );
+ }
break;
}
}