[Libreoffice-commits] core.git: sc/source
Libreoffice Gerrit user
logerrit at kemper.freedesktop.org
Tue Mar 12 17:56:17 UTC 2019
sc/source/ui/view/viewfunc.cxx | 20 ++++++++------------
1 file changed, 8 insertions(+), 12 deletions(-)
New commits:
commit 661d22e86175fe919e956c9c6a1278d73758d54c
Author: Luboš Luňák <l.lunak at collabora.com>
AuthorDate: Tue Mar 12 12:20:56 2019 +0100
Commit: Noel Grandin <noel.grandin at collabora.co.uk>
CommitDate: Tue Mar 12 18:55:49 2019 +0100
fix a possible ScTokenArray leak
To me it looks like pArr is leaked in the bAgain = true case, or the code
is rather misleading.
Change-Id: I41ea26052671f127141d5421d0c446da4606da28
Reviewed-on: https://gerrit.libreoffice.org/69091
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>
diff --git a/sc/source/ui/view/viewfunc.cxx b/sc/source/ui/view/viewfunc.cxx
index 12b78243c34d..00c0678ba32c 100644
--- a/sc/source/ui/view/viewfunc.cxx
+++ b/sc/source/ui/view/viewfunc.cxx
@@ -409,17 +409,19 @@ void ScViewFunc::EnterData( SCCOL nCol, SCROW nRow, SCTAB nTab,
aComp.SetExtendedErrorDetection( ScCompiler::EXTENDED_ERROR_DETECTION_NAME_BREAK );
}
OUString aFormula( rString );
- ScTokenArray* pArr;
+ std::unique_ptr< ScTokenArray > pArr;
bool bAgain;
do
{
bAgain = false;
bool bAddEqual = false;
- ScTokenArray* pArrFirst = pArr = aComp.CompileString( aFormula ).release();
+ pArr = aComp.CompileString( aFormula );
bool bCorrected = aComp.IsCorrected();
+ std::unique_ptr< ScTokenArray > pArrFirst;
if ( bCorrected )
{ // try to parse with first parser-correction
- pArr = aComp.CompileString( aComp.GetCorrectedFormula() ).release();
+ pArrFirst = std::move( pArr );
+ pArr = aComp.CompileString( aComp.GetCorrectedFormula() );
}
if ( pArr->GetCodeError() == FormulaError::NONE )
{
@@ -454,17 +456,12 @@ void ScViewFunc::EnterData( SCCOL nCol, SCROW nRow, SCTAB nTab,
if ( nResult == RET_YES )
{
aFormula = aCorrectedFormula;
- if ( pArr != pArrFirst )
- delete pArrFirst;
bAgain = true;
}
else
{
- if ( pArr != pArrFirst )
- {
- delete pArr;
- pArr = pArrFirst;
- }
+ if ( pArrFirst )
+ pArr = std::move( pArrFirst );
}
}
} while ( bAgain );
@@ -507,8 +504,7 @@ void ScViewFunc::EnterData( SCCOL nCol, SCROW nRow, SCTAB nTab,
}
}
- ScFormulaCell aCell(pDoc, aPos, *pArr, formula::FormulaGrammar::GRAM_DEFAULT, ScMatrixMode::NONE);
- delete pArr;
+ ScFormulaCell aCell(pDoc, aPos, std::move( pArr ), formula::FormulaGrammar::GRAM_DEFAULT, ScMatrixMode::NONE);
SvNumberFormatter* pFormatter = pDoc->GetFormatTable();
for (const auto& rTab : rMark)
More information about the Libreoffice-commits
mailing list