Kaydet (Commit) c40a1722 authored tarafından Eike Rathke's avatar Eike Rathke Kaydeden (comit) Andras Timar

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 f161cdc9)

Reviewed-on: https://gerrit.libreoffice.org/51934Reviewed-by: 's avatarStephan Bergmann <sbergman@redhat.com>
Tested-by: 's avatarJenkins <ci@libreoffice.org>
(cherry picked from commit c4946ba1)

Change-Id: I24133fb6c52bd7500037364120cb11d1b1f099c2
8aeed6876d80b7ebe4ebb5e2cfd12e00420bd207
üst 6eaf5fa2
...@@ -257,8 +257,13 @@ public: ...@@ -257,8 +257,13 @@ public:
ScDBData* findByIndex(sal_uInt16 nIndex); ScDBData* findByIndex(sal_uInt16 nIndex);
ScDBData* findByUpperName(const OUString& rName); ScDBData* findByUpperName(const OUString& rName);
iterator findByUpperName2(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 <TRUE/> if inserted, else <FALSE/>.
*/
bool insert(ScDBData* p);
void erase(const iterator& itr); void erase(const iterator& itr);
bool empty() const; bool empty() const;
size_t size() const; size_t size() const;
......
...@@ -1637,8 +1637,6 @@ void Test::testSharedFormulaUpdateOnDBChange() ...@@ -1637,8 +1637,6 @@ void Test::testSharedFormulaUpdateOnDBChange()
// Define database range 'MyRange' for A1:A2. // Define database range 'MyRange' for A1:A2.
ScDBData* pData = new ScDBData("MyRange", 0, 0, 0, 0, 1); ScDBData* pData = new ScDBData("MyRange", 0, 0, 0, 0, 1);
bool bInserted = pDBs->getNamedDBs().insert(pData); bool bInserted = pDBs->getNamedDBs().insert(pData);
if (!bInserted)
delete pData;
CPPUNIT_ASSERT_MESSAGE("Failed to insert a new database range.", bInserted); CPPUNIT_ASSERT_MESSAGE("Failed to insert a new database range.", bInserted);
// Insert in C2:C4 a group of formula cells that reference MyRange. // Insert in C2:C4 a group of formula cells that reference MyRange.
...@@ -1662,8 +1660,6 @@ void Test::testSharedFormulaUpdateOnDBChange() ...@@ -1662,8 +1660,6 @@ void Test::testSharedFormulaUpdateOnDBChange()
ScDBCollection aNewDBs(m_pDoc); ScDBCollection aNewDBs(m_pDoc);
ScDBData* pNewData = new ScDBData("MyRange", 0, 0, 0, 0, 3); ScDBData* pNewData = new ScDBData("MyRange", 0, 0, 0, 0, 3);
bInserted = aNewDBs.getNamedDBs().insert(pNewData); bInserted = aNewDBs.getNamedDBs().insert(pNewData);
if (!bInserted)
delete pNewData;
CPPUNIT_ASSERT_MESSAGE("Failed to insert a new database range.", bInserted); CPPUNIT_ASSERT_MESSAGE("Failed to insert a new database range.", bInserted);
std::vector<ScRange> aDeleted; std::vector<ScRange> aDeleted;
......
...@@ -468,10 +468,7 @@ void ScXMLDatabaseRangeContext::EndElement() ...@@ -468,10 +468,7 @@ void ScXMLDatabaseRangeContext::EndElement()
if (pData.get()) if (pData.get())
{ {
setAutoFilterFlags(*pDoc, *pData); setAutoFilterFlags(*pDoc, *pData);
if (pDoc->GetDBCollection()->getNamedDBs().insert(pData.get())) pDoc->GetDBCollection()->getNamedDBs().insert(pData.release());
{
pData.release();
}
} }
} }
} }
......
...@@ -168,7 +168,6 @@ bool ScDBDocFunc::RenameDBRange( const OUString& rOld, const OUString& rNew ) ...@@ -168,7 +168,6 @@ bool ScDBDocFunc::RenameDBRange( const OUString& rOld, const OUString& rNew )
bool bInserted = rDBs.insert(pNewData); bool bInserted = rDBs.insert(pNewData);
if (!bInserted) // Fehler -> alten Zustand wiederherstellen if (!bInserted) // Fehler -> alten Zustand wiederherstellen
{ {
delete pNewData;
rDoc.SetDBCollection(pUndoColl); // gehoert dann dem Dokument rDoc.SetDBCollection(pUndoColl); // gehoert dann dem Dokument
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment