diff options
author | Eike Rathke <erack@redhat.com> | 2013-11-22 23:25:00 +0100 |
---|---|---|
committer | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2013-11-22 18:19:27 -0600 |
commit | 1f38670b11f7d49505603852f6e259cfc2b7710e (patch) | |
tree | 7bf70dfdacaaa148827d7a0a376f0f6c1dd0bbe1 | |
parent | 42f4261f835ad4ff7d98126cc7fb3be84dc76126 (diff) |
resolved fdo#38592 do not insert extraneous parameter in import
Importing already a Calc-only number of parameters do not insert
extraneous parameters.
(cherry picked from commit 4b9304ecdd067307e24e4388fe1addcab9e85bd0)
Change-Id: I011e3df24573fce9f2788c9311089af984650220
Reviewed-on: https://gerrit.libreoffice.org/6764
Reviewed-by: Markus Mohrhard <markus.mohrhard@googlemail.com>
Tested-by: Markus Mohrhard <markus.mohrhard@googlemail.com>
-rw-r--r-- | sc/source/filter/inc/formulaparser.hxx | 2 | ||||
-rw-r--r-- | sc/source/filter/oox/formulaparser.cxx | 15 |
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; } } |