summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWinfried Donkers <winfrieddonkers@libreoffice.org>2015-02-11 09:32:09 +0100
committerEike Rathke <erack@redhat.com>2015-02-13 12:50:00 +0000
commit14b76ff3a98898fcccfa6e48ca8ae1e7bea802e2 (patch)
tree3e755f8e6f6f0d58004c5b97f8fff91d55439145
parentb273a7b723d95f5feabf79b6e8a83beead1ce1bf (diff)
tdf#88576 fix handling of empty arguments in IF(), IFERROR() and IFNA()
Reviewed-on: https://gerrit.libreoffice.org/14415 Reviewed-by: Eike Rathke <erack@redhat.com> Tested-by: Eike Rathke <erack@redhat.com> (cherry picked from commit 0b75eda1090f92adc678ceff2565da2dc7d9328c) tdf#88576 check that two parameters are given for IFERROR() and IFNA() Otherwise the functions failed only for the error case resulting in #NULL! error. (cherry picked from commit 6583f4e30015164af4972921b5bb7880dfb65f65) eb987637698ab418fc0a60cd873e23878c9f497b Change-Id: I8acca26cf7398768a9e25f97f3a9e61754ab2179 Reviewed-on: https://gerrit.libreoffice.org/14423 Tested-by: Eike Rathke <erack@redhat.com> Reviewed-by: Eike Rathke <erack@redhat.com>
-rw-r--r--sc/source/core/tool/interpr1.cxx6
-rw-r--r--sc/source/core/tool/interpr4.cxx5
2 files changed, 8 insertions, 3 deletions
diff --git a/sc/source/core/tool/interpr1.cxx b/sc/source/core/tool/interpr1.cxx
index 4a63f1426396..06cc58d1549f 100644
--- a/sc/source/core/tool/interpr1.cxx
+++ b/sc/source/core/tool/interpr1.cxx
@@ -238,9 +238,11 @@ void ScInterpreter::ScIfError( bool bNAonly )
{
const short* pJump = pCur->GetJump();
short nJumpCount = pJump[ 0 ];
- if (!sp)
+ if (!sp || nJumpCount != 2)
{
- PushError( errUnknownStackVariable);
+ // Reset nGlobalError here to not propagate the old error, if any.
+ nGlobalError = (sp ? errParameterExpected : errUnknownStackVariable);
+ PushError( nGlobalError);
aCode.Jump( pJump[ nJumpCount ], pJump[ nJumpCount ] );
return;
}
diff --git a/sc/source/core/tool/interpr4.cxx b/sc/source/core/tool/interpr4.cxx
index 66e02ea7a8b0..58bc0046148a 100644
--- a/sc/source/core/tool/interpr4.cxx
+++ b/sc/source/core/tool/interpr4.cxx
@@ -3082,7 +3082,10 @@ void ScInterpreter::ScExternal()
void ScInterpreter::ScMissing()
{
- PushTempToken( new FormulaMissingToken );
+ if ( aCode.IsEndOfPath() )
+ PushTempToken( new ScEmptyCellToken( false, false ) );
+ else
+ PushTempToken( new FormulaMissingToken );
}
#ifndef DISABLE_SCRIPTING