diff options
author | Caolán McNamara <caolanm@redhat.com> | 2016-03-15 21:11:24 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2016-03-16 09:11:12 +0000 |
commit | 1c122eb61d1ea6e8eb597d16cc3df0826bde8c9f (patch) | |
tree | 9111a32f2b3433700d6c1eb08d5510a29cd1898c | |
parent | f87317c3264b6aecfb6b7dcf99fa1783d79d9605 (diff) |
Undo my poor mans recursion control in favour of the real thing
i.e. undo
commit ea441294e15b23f703f139055e9a18287745ca23
Author: Caolán McNamara <caolanm@redhat.com>
Date: Thu Apr 2 13:19:32 2015 +0100
avoid endless recursion in fdo84763-2.ods
and rely on
commit 29ee431c1cf859c3d5a5041cff5cb04b89db27a0
Author: Eike Rathke <erack@redhat.com>
Date: Tue Mar 15 17:39:03 2016 +0100
Resolves: tdf#93196 add RecursionCounter guard also to InterpretFormulaGroup()
... same as for ScFormulaCell::InterpretTail()
Change-Id: I85dc6e37d987ce9fe41a9e4c337e02a1cec4f0c8
-rw-r--r-- | sc/source/core/data/formulacell.cxx | 3 | ||||
-rw-r--r-- | sc/source/core/data/grouptokenconverter.cxx | 13 | ||||
-rw-r--r-- | sc/source/core/inc/grouptokenconverter.hxx | 2 |
3 files changed, 4 insertions, 14 deletions
diff --git a/sc/source/core/data/formulacell.cxx b/sc/source/core/data/formulacell.cxx index d483ef7175c7..a2891aefdf88 100644 --- a/sc/source/core/data/formulacell.cxx +++ b/sc/source/core/data/formulacell.cxx @@ -4036,8 +4036,7 @@ bool ScFormulaCell::InterpretFormulaGroup() ScTokenArray aCode; ScGroupTokenConverter aConverter(aCode, *pDocument, *this, xGroup->mpTopCell->aPos); - std::vector<ScTokenArray*> aLoopControl; - if (!aConverter.convert(*pCode, aLoopControl)) + if (!aConverter.convert(*pCode)) { SAL_INFO("sc.opencl", "conversion of group " << this << " failed, disabling"); mxGroup->meCalcState = sc::GroupCalcDisabled; diff --git a/sc/source/core/data/grouptokenconverter.cxx b/sc/source/core/data/grouptokenconverter.cxx index de3fbf2d2bd0..da3964cf9864 100644 --- a/sc/source/core/data/grouptokenconverter.cxx +++ b/sc/source/core/data/grouptokenconverter.cxx @@ -89,7 +89,7 @@ ScGroupTokenConverter::ScGroupTokenConverter(ScTokenArray& rGroupTokens, ScDocum { } -bool ScGroupTokenConverter::convert(ScTokenArray& rCode, std::vector<ScTokenArray*>& rConversionStack) +bool ScGroupTokenConverter::convert(ScTokenArray& rCode) { #if 0 { // debug to start with: @@ -232,16 +232,7 @@ bool ScGroupTokenConverter::convert(ScTokenArray& rCode, std::vector<ScTokenArra mrGroupTokens.AddOpCode(ocOpen); - if (std::find(rConversionStack.begin(), rConversionStack.end(), pNamedTokens) != rConversionStack.end()) - { - SAL_WARN("sc", "loop in recursive ScGroupTokenConverter::convert"); - return false; - } - - rConversionStack.push_back(pNamedTokens); - bool bOk = convert(*pNamedTokens, rConversionStack); - rConversionStack.pop_back(); - if (!bOk) + if (!convert(*pNamedTokens)) return false; mrGroupTokens.AddOpCode(ocClose); diff --git a/sc/source/core/inc/grouptokenconverter.hxx b/sc/source/core/inc/grouptokenconverter.hxx index b2213636a151..9685681886e0 100644 --- a/sc/source/core/inc/grouptokenconverter.hxx +++ b/sc/source/core/inc/grouptokenconverter.hxx @@ -30,7 +30,7 @@ class SC_DLLPUBLIC ScGroupTokenConverter public: ScGroupTokenConverter(ScTokenArray& rGroupTokens, ScDocument& rDoc, ScFormulaCell& rCell, const ScAddress& rPos); - bool convert(ScTokenArray& rCode, std::vector<ScTokenArray*>& rConversionStack); + bool convert(ScTokenArray& rCode); }; #endif // INCLUDED_SC_SOURCE_CORE_INC_GROUPTOKENCONVERTER_HXX |