From 1801bbe33a8383576231ebbc93f66b8ef5e56a93 Mon Sep 17 00:00:00 2001 From: Eike Rathke Date: Fri, 8 Dec 2017 15:59:53 +0100 Subject: ofz#7121 NamedDBs::insert takes ownership of its argument at one point this was based on std::auto_ptr and didn't free its arg on failure Adapt description to reality (cherry picked from commit f161cdc979587488df83e63002bee7ee15152d42) Reviewed-on: https://gerrit.libreoffice.org/51934 Reviewed-by: Stephan Bergmann Tested-by: Jenkins (cherry picked from commit c4946ba195c9f0c2fb3f18f1028eea725c920e2e) Change-Id: I24133fb6c52bd7500037364120cb11d1b1f099c2 8aeed6876d80b7ebe4ebb5e2cfd12e00420bd207 --- sc/inc/dbdata.hxx | 9 +++++++-- sc/qa/unit/ucalc_sharedformula.cxx | 4 ---- sc/source/filter/xml/xmldrani.cxx | 5 +---- sc/source/ui/docshell/dbdocfun.cxx | 1 - 4 files changed, 8 insertions(+), 11 deletions(-) diff --git a/sc/inc/dbdata.hxx b/sc/inc/dbdata.hxx index 328dd2a597e4..df6b88d4dbb9 100644 --- a/sc/inc/dbdata.hxx +++ b/sc/inc/dbdata.hxx @@ -257,8 +257,13 @@ public: ScDBData* findByIndex(sal_uInt16 nIndex); ScDBData* findByUpperName(const OUString& rName); iterator findByUpperName2(const OUString& rName); - // Takes ownership of p iff it returns true: - SAL_WARN_UNUSED_RESULT bool insert(ScDBData* p); + + /** Takes ownership of p and attempts to insert it into the collection. + Deletes p if it could not be inserted, i.e. duplicate name. + @return if inserted, else . + */ + bool insert(ScDBData* p); + void erase(const iterator& itr); bool empty() const; size_t size() const; diff --git a/sc/qa/unit/ucalc_sharedformula.cxx b/sc/qa/unit/ucalc_sharedformula.cxx index a66a09302667..491573cc86cf 100644 --- a/sc/qa/unit/ucalc_sharedformula.cxx +++ b/sc/qa/unit/ucalc_sharedformula.cxx @@ -1637,8 +1637,6 @@ void Test::testSharedFormulaUpdateOnDBChange() // Define database range 'MyRange' for A1:A2. ScDBData* pData = new ScDBData("MyRange", 0, 0, 0, 0, 1); bool bInserted = pDBs->getNamedDBs().insert(pData); - if (!bInserted) - delete pData; CPPUNIT_ASSERT_MESSAGE("Failed to insert a new database range.", bInserted); // Insert in C2:C4 a group of formula cells that reference MyRange. @@ -1662,8 +1660,6 @@ void Test::testSharedFormulaUpdateOnDBChange() ScDBCollection aNewDBs(m_pDoc); ScDBData* pNewData = new ScDBData("MyRange", 0, 0, 0, 0, 3); bInserted = aNewDBs.getNamedDBs().insert(pNewData); - if (!bInserted) - delete pNewData; CPPUNIT_ASSERT_MESSAGE("Failed to insert a new database range.", bInserted); std::vector aDeleted; diff --git a/sc/source/filter/xml/xmldrani.cxx b/sc/source/filter/xml/xmldrani.cxx index c525b046cfe2..f7eb3be0d480 100644 --- a/sc/source/filter/xml/xmldrani.cxx +++ b/sc/source/filter/xml/xmldrani.cxx @@ -468,10 +468,7 @@ void ScXMLDatabaseRangeContext::EndElement() if (pData.get()) { setAutoFilterFlags(*pDoc, *pData); - if (pDoc->GetDBCollection()->getNamedDBs().insert(pData.get())) - { - pData.release(); - } + pDoc->GetDBCollection()->getNamedDBs().insert(pData.release()); } } } diff --git a/sc/source/ui/docshell/dbdocfun.cxx b/sc/source/ui/docshell/dbdocfun.cxx index f33efe8cf789..82692b72f597 100644 --- a/sc/source/ui/docshell/dbdocfun.cxx +++ b/sc/source/ui/docshell/dbdocfun.cxx @@ -168,7 +168,6 @@ bool ScDBDocFunc::RenameDBRange( const OUString& rOld, const OUString& rNew ) bool bInserted = rDBs.insert(pNewData); if (!bInserted) // Fehler -> alten Zustand wiederherstellen { - delete pNewData; rDoc.SetDBCollection(pUndoColl); // gehoert dann dem Dokument } -- cgit