summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEike Rathke <erack@redhat.com>2016-10-12 19:47:44 +0200
committerAndras Timar <andras.timar@collabora.com>2016-10-23 22:17:10 +0200
commitf42698e76d4cfd184d25768ddbd92e0968b6f12e (patch)
treed12eaccf0cd26a61925fef5f9bec7c9ffccd368c
parent814d572b6713d6e7c16663b706e6e9e706ebca29 (diff)
create NoName error token instead of setting error at the token array
... when handling name token. This can happen when importing BIFF .xls and the original range is not present in the document. The document is broken, but such formula can continue to work if the range expression was not actually executed, for example IF(TRUE(),then_good,else_bad_range) where else_bad_range is #NAME? error. (cherry picked from commit d3645961d98ce9f0cfb1ef7f0aba7bf020b90945) Change-Id: I823ac89115418cf5069b2baf5c5de2c814319ae7 Reviewed-on: https://gerrit.libreoffice.org/29795 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Eike Rathke <erack@redhat.com> (cherry picked from commit f81b2592cd93dac2cb78fdb22bf661d04bdef25f)
-rw-r--r--sc/source/core/tool/compiler.cxx12
1 files changed, 10 insertions, 2 deletions
diff --git a/sc/source/core/tool/compiler.cxx b/sc/source/core/tool/compiler.cxx
index 9132bbda5237..d10a46ffd497 100644
--- a/sc/source/core/tool/compiler.cxx
+++ b/sc/source/core/tool/compiler.cxx
@@ -4489,6 +4489,7 @@ ScRangeData* ScCompiler::GetRangeData( const FormulaToken& rToken ) const
bool ScCompiler::HandleRange()
{
+ ScTokenArray* pNew;
const ScRangeData* pRangeData = GetRangeData( *mpToken);
if (pRangeData)
{
@@ -4497,7 +4498,6 @@ bool ScCompiler::HandleRange()
SetError( errNoName );
else if (mbJumpCommandReorder)
{
- ScTokenArray* pNew;
// put named formula into parentheses.
// But only if there aren't any yet, parenthetical
// ocSep doesn't work, e.g. SUM((...;...))
@@ -4538,7 +4538,15 @@ bool ScCompiler::HandleRange()
}
}
else
- SetError(errNoName);
+ {
+ // No ScRangeData for an already compiled token can happen in BIFF .xls
+ // import if the original range is not present in the document.
+ pNew = new ScTokenArray;
+ pNew->Add( new FormulaErrorToken(errNoName));
+ PushTokenArray( pNew, true );
+ pNew->Reset();
+ return GetToken();
+ }
return true;
}