summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2016-03-15 21:11:24 +0000
committerCaolán McNamara <caolanm@redhat.com>2016-03-16 09:11:12 +0000
commit1c122eb61d1ea6e8eb597d16cc3df0826bde8c9f (patch)
tree9111a32f2b3433700d6c1eb08d5510a29cd1898c
parentf87317c3264b6aecfb6b7dcf99fa1783d79d9605 (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.cxx3
-rw-r--r--sc/source/core/data/grouptokenconverter.cxx13
-rw-r--r--sc/source/core/inc/grouptokenconverter.hxx2
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