summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEike Rathke <erack@redhat.com>2013-11-22 23:25:00 +0100
committerMarkus Mohrhard <markus.mohrhard@googlemail.com>2013-11-22 18:19:27 -0600
commit1f38670b11f7d49505603852f6e259cfc2b7710e (patch)
tree7bf70dfdacaaa148827d7a0a376f0f6c1dd0bbe1
parent42f4261f835ad4ff7d98126cc7fb3be84dc76126 (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.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;
}
}