diff options
author | Eike Rathke <erack@redhat.com> | 2016-03-23 14:26:55 +0100 |
---|---|---|
committer | Michael Stahl <mstahl@redhat.com> | 2016-04-08 10:15:33 +0000 |
commit | fecbcf523ee1e8a13b18ba1cfde36a2368da6949 (patch) | |
tree | 7ef7701a920e5070827d07c1aa49d3daf2f0b000 | |
parent | 88bd2f2037870b2c11688b22160d5d1d6df46172 (diff) |
add a recursion guard to lcl_FindRangeNamesInUse()
Change-Id: Ifbc02304f5a2e080db2d6645e2c7f825a2c56cb5
Reviewed-on: https://gerrit.libreoffice.org/23473
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Michael Stahl <mstahl@redhat.com>
-rw-r--r-- | sc/source/core/data/formulacell.cxx | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/sc/source/core/data/formulacell.cxx b/sc/source/core/data/formulacell.cxx index f9c92e6f4fc7..ceb7f68d6a6f 100644 --- a/sc/source/core/data/formulacell.cxx +++ b/sc/source/core/data/formulacell.cxx @@ -3555,7 +3555,8 @@ void ScFormulaCell::UpdateGrow( const ScRange& rArea, SCCOL nGrowX, SCROW nGrowY StartListeningTo( pDocument ); // Listener as previous } -static void lcl_FindRangeNamesInUse(std::set<sal_uInt16>& rIndexes, ScTokenArray* pCode, ScRangeName* pNames) +static void lcl_FindRangeNamesInUse(std::set<sal_uInt16>& rIndexes, ScTokenArray* pCode, ScRangeName* pNames, + int nRecursion) { for (FormulaToken* p = pCode->First(); p; p = pCode->Next()) { @@ -3564,16 +3565,19 @@ static void lcl_FindRangeNamesInUse(std::set<sal_uInt16>& rIndexes, ScTokenArray sal_uInt16 nTokenIndex = p->GetIndex(); rIndexes.insert( nTokenIndex ); - ScRangeData* pSubName = pNames->findByIndex(p->GetIndex()); - if (pSubName) - lcl_FindRangeNamesInUse(rIndexes, pSubName->GetCode(), pNames); + if (nRecursion < 126) // whatever.. 42*3 + { + ScRangeData* pSubName = pNames->findByIndex(p->GetIndex()); + if (pSubName) + lcl_FindRangeNamesInUse(rIndexes, pSubName->GetCode(), pNames, nRecursion+1); + } } } } void ScFormulaCell::FindRangeNamesInUse(std::set<sal_uInt16>& rIndexes) const { - lcl_FindRangeNamesInUse( rIndexes, pCode, pDocument->GetRangeName() ); + lcl_FindRangeNamesInUse( rIndexes, pCode, pDocument->GetRangeName(), 0); } void ScFormulaCell::SetChanged(bool b) |