sc/inc/compiler.hxx | 9 ++++++++- sc/source/filter/excel/xechart.cxx | 4 +++- sc/source/filter/oox/formulabuffer.cxx | 2 +- sc/source/ui/miscdlgs/anyrefdg.cxx | 8 ++++---- sc/source/ui/vba/vbaname.cxx | 6 ++++-- sc/source/ui/vba/vbanames.cxx | 4 +++- sc/source/ui/vba/vbarange.cxx | 7 +++++-- sc/source/ui/view/tabvwsha.cxx | 4 +++- sc/source/ui/view/viewfun4.cxx | 9 ++++++--- 9 files changed, 37 insertions(+), 16 deletions(-)
New commits: commit 1b83e42eced4210978ed574d1a71c72a4862fd60 Author: Kohei Yoshida <[email protected]> Date: Mon Nov 4 20:36:53 2013 -0500 Check all call sites of CompileString() and make sure we don't leak. We *were* leaking quite a bit. Change-Id: I3f53eff22beab27b34a055a4452311f2e2f771db diff --git a/sc/inc/compiler.hxx b/sc/inc/compiler.hxx index 28e4efe..c16f749 100644 --- a/sc/inc/compiler.hxx +++ b/sc/inc/compiler.hxx @@ -431,7 +431,14 @@ public: bool IsCorrected() { return bCorrected; } const OUString& GetCorrectedFormula() { return aCorrectedFormula; } - // Use convention from this->aPos by default + /** + * Tokenize formula expression string into an array of tokens. + * + * @param rFormula formula expression to tokenize. + * + * @return heap allocated token array object. The caller <i>must</i> + * manage the life cycle of this object. + */ ScTokenArray* CompileString( const OUString& rFormula ); ScTokenArray* CompileString( const OUString& rFormula, const OUString& rFormulaNmsp ); const ScDocument* GetDoc() const { return pDoc; } diff --git a/sc/source/filter/excel/xechart.cxx b/sc/source/filter/excel/xechart.cxx index e25e0d2..26deac3 100644 --- a/sc/source/filter/excel/xechart.cxx +++ b/sc/source/filter/excel/xechart.cxx @@ -70,6 +70,8 @@ #include "xepage.hxx" #include "xestyle.hxx" +#include <boost/scoped_ptr.hpp> + using ::com::sun::star::uno::Any; using ::com::sun::star::uno::Reference; using ::com::sun::star::uno::Sequence; @@ -917,7 +919,7 @@ sal_uInt16 XclExpChSourceLink::ConvertDataSequence( Reference< XDataSequence > x OUString aRangeRepr = xDataSeq->getSourceRangeRepresentation(); ScCompiler aComp( GetDocPtr(), ScAddress() ); aComp.SetGrammar( GetDocPtr()->GetGrammar() ); - ScTokenArray* pArray = aComp.CompileString( aRangeRepr ); + boost::scoped_ptr<ScTokenArray> pArray(aComp.CompileString(aRangeRepr)); if( !pArray ) return nDefCount; diff --git a/sc/source/filter/oox/formulabuffer.cxx b/sc/source/filter/oox/formulabuffer.cxx index 6022ae7..cf5b73e 100644 --- a/sc/source/filter/oox/formulabuffer.cxx +++ b/sc/source/filter/oox/formulabuffer.cxx @@ -211,7 +211,7 @@ void FormulaBuffer::applyArrayFormulas( const std::vector< TokenRangeAddressItem ScCompiler aComp(&rDocImport.getDoc(), aPos); aComp.SetGrammar(formula::FormulaGrammar::GRAM_ENGLISH_XL_OOX); - ScTokenArray* pArray = aComp.CompileString(it->maTokenAndAddress.maTokenStr); + boost::scoped_ptr<ScTokenArray> pArray(aComp.CompileString(it->maTokenAndAddress.maTokenStr)); if (pArray) rDocImport.setMatrixCells(aRange, *pArray, formula::FormulaGrammar::GRAM_ENGLISH_XL_OOX); } diff --git a/sc/source/ui/miscdlgs/anyrefdg.cxx b/sc/source/ui/miscdlgs/anyrefdg.cxx index 1ec55dc..16cb4dbb 100644 --- a/sc/source/ui/miscdlgs/anyrefdg.cxx +++ b/sc/source/ui/miscdlgs/anyrefdg.cxx @@ -43,6 +43,8 @@ #include "rangeutl.hxx" #include "tokenarray.hxx" +#include <boost/scoped_ptr.hpp> + ScFormulaReferenceHelper::ScFormulaReferenceHelper(IAnyRefDialog* _pDlg,SfxBindings* _pBindings) : m_pDlg(_pDlg) , pRefEdit (NULL) @@ -186,10 +188,9 @@ void ScFormulaReferenceHelper::ShowFormulaReference(const OUString& rStr) SCTAB nTab = pViewData->GetTabNo(); ScAddress aPos( nCol, nRow, nTab ); - ScTokenArray* pScTokA=pRefComp->CompileString(rStr); - //pRefComp->CompileTokenArray(); + boost::scoped_ptr<ScTokenArray> pScTokA(pRefComp->CompileString(rStr)); - if(pTabViewShell!=NULL && pScTokA!=NULL) + if (pTabViewShell && pScTokA) { pTabViewShell->DoneRefMode( false ); pTabViewShell->ClearHighlightRanges(); @@ -225,7 +226,6 @@ void ScFormulaReferenceHelper::ShowFormulaReference(const OUString& rStr) pToken = static_cast<const ScToken*>(pScTokA->GetNextReference()); } } - if(pScTokA!=NULL) delete pScTokA; } } } diff --git a/sc/source/ui/vba/vbaname.cxx b/sc/source/ui/vba/vbaname.cxx index fc5592b..3c3d448 100644 --- a/sc/source/ui/vba/vbaname.cxx +++ b/sc/source/ui/vba/vbaname.cxx @@ -34,6 +34,8 @@ #include "compiler.hxx" #include "tokenarray.hxx" +#include <boost/scoped_ptr.hpp> + using namespace ::ooo::vba; using namespace ::com::sun::star; @@ -135,8 +137,8 @@ void ScVbaName::setContent( const OUString& rContent, const formula::FormulaGra // Shorter way of doing this ? ScCompiler aComp( pDoc, pOldData->GetPos() ); aComp.SetGrammar( eGrammar ); - ScTokenArray aArray(*aComp.CompileString( sContent ) ); - pOldData->SetCode( aArray ); + boost::scoped_ptr<ScTokenArray> pArray(aComp.CompileString(sContent)); + pOldData->SetCode(*pArray); } } } diff --git a/sc/source/ui/vba/vbanames.cxx b/sc/source/ui/vba/vbanames.cxx index eb1c4ab..c3001c4 100644 --- a/sc/source/ui/vba/vbanames.cxx +++ b/sc/source/ui/vba/vbanames.cxx @@ -34,6 +34,8 @@ #include "tokenarray.hxx" #include "cellsuno.hxx" +#include <boost/scoped_ptr.hpp> + using namespace ::ooo::vba; using namespace ::com::sun::star; @@ -158,7 +160,7 @@ ScVbaNames::Add( const css::uno::Any& Name , ScAddress aBlank; ScCompiler aComp( getScDocument(), aBlank ); aComp.SetGrammar( eGram ); - ScTokenArray* pTokens = aComp.CompileString( sFormula ); + boost::scoped_ptr<ScTokenArray> pTokens(aComp.CompileString(sFormula)); if ( pTokens ) { ScRange aRange; diff --git a/sc/source/ui/vba/vbarange.cxx b/sc/source/ui/vba/vbarange.cxx index b533561..a551780 100644 --- a/sc/source/ui/vba/vbarange.cxx +++ b/sc/source/ui/vba/vbarange.cxx @@ -172,6 +172,9 @@ #include <com/sun/star/bridge/oleautomation/Date.hpp> #include "tokenarray.hxx" #include "tokenuno.hxx" + +#include <boost/scoped_ptr.hpp> + using namespace ::ooo::vba; using namespace ::com::sun::star; using ::std::vector; @@ -901,7 +904,7 @@ protected: ScCompiler aCompiler( m_pDoc, aCellRanges.front()->aStart ); aCompiler.SetGrammar(m_eGrammar); // compile the string in the format passed in - aCompiler.CompileString( sFormula ); + boost::scoped_ptr<ScTokenArray> pArray(aCompiler.CompileString(sFormula)); // set desired convention to that of the document aCompiler.SetGrammar( formula::FormulaGrammar::GRAM_PODF_A1 ); OUString sConverted; @@ -944,7 +947,7 @@ public: ScRangeList aCellRanges = pUnoRangesBase->GetRangeList(); ScCompiler aCompiler( m_pDoc, aCellRanges.front()->aStart ); aCompiler.SetGrammar(formula::FormulaGrammar::GRAM_DEFAULT); - aCompiler.CompileString( sVal ); + boost::scoped_ptr<ScTokenArray> pArray(aCompiler.CompileString(sVal)); // set desired convention aCompiler.SetGrammar( m_eGrammar ); OUString sConverted; diff --git a/sc/source/ui/view/tabvwsha.cxx b/sc/source/ui/view/tabvwsha.cxx index c8917fa..09f482b 100644 --- a/sc/source/ui/view/tabvwsha.cxx +++ b/sc/source/ui/view/tabvwsha.cxx @@ -53,6 +53,8 @@ #include "cellvalue.hxx" #include "tokenarray.hxx" +#include <boost/scoped_ptr.hpp> + sal_Bool ScTabViewShell::GetFunction( OUString& rFuncStr, sal_uInt16 nErrCode ) { OUString aStr; @@ -565,7 +567,7 @@ bool ScTabViewShell::IsRefInputMode() const ScCompiler aComp( pDoc, aPos ); aComp.SetGrammar(pDoc->GetGrammar()); aComp.SetCloseBrackets( false ); - ScTokenArray* pArr = aComp.CompileString( aString ); + boost::scoped_ptr<ScTokenArray> pArr(aComp.CompileString(aString)); if ( pArr && pArr->MayReferenceFollow() ) { return true; diff --git a/sc/source/ui/view/viewfun4.cxx b/sc/source/ui/view/viewfun4.cxx index 8f140c8..e924b34 100644 --- a/sc/source/ui/view/viewfun4.cxx +++ b/sc/source/ui/view/viewfun4.cxx @@ -64,6 +64,7 @@ #include "dociter.hxx" #include "reffind.hxx" #include "compiler.hxx" +#include "tokenarray.hxx" #include <boost/scoped_ptr.hpp> @@ -257,9 +258,11 @@ void ScViewFunc::DoRefConversion( sal_Bool bRecord ) OUString aNew = aFinder.GetText(); ScCompiler aComp( pDoc, aPos); aComp.SetGrammar(pDoc->GetGrammar()); - ScTokenArray* pArr = aComp.CompileString( aNew ); - ScFormulaCell* pNewCell = new ScFormulaCell( pDoc, aPos, - pArr,formula::FormulaGrammar::GRAM_DEFAULT, MM_NONE ); + boost::scoped_ptr<ScTokenArray> pArr(aComp.CompileString(aNew)); + ScFormulaCell* pNewCell = + new ScFormulaCell( + pDoc, aPos, pArr.get(), formula::FormulaGrammar::GRAM_DEFAULT, MM_NONE); + pDoc->SetFormulaCell(aPos, pNewCell); bOk = true; } _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
