summaryrefslogtreecommitdiff
path: root/sc/inc/dbdata.hxx
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2014-03-12 16:05:37 +0100
committerStephan Bergmann <sbergman@redhat.com>2014-03-12 16:24:43 +0100
commit2acdcb2374e448371b173feb03650d8d6db8aba2 (patch)
tree41f165802b60786e854d3f2f13d9639df81ac1d8 /sc/inc/dbdata.hxx
parent54b4add66698f94e875379bcfc6c76b72488fd7b (diff)
coverity#1158232 Fix ownership of NamedDBs::insert argument
f70d03436b7b501e0ed1d745935a204b9b97b855 "coverity#1158232 have a stab at silencing warning with function markup" claimed that NamedDBs::insert always takes ownerhip of its argument, but boost::ptr_set::insert(std::auto_ptr<U> x) simply calls insert(x.release()), so only takes ownership when it returns true. ScDBDocFunc::AddDBRange (sc/source/ui/docshell/dbdocfun.cxx) relies on this behavior, deleting the argument when insert failed. ScDBDocFunc::RenameDBRange (sc/source/ui/docshell/dbdocfun.cxx) relied on this behavior, deleting the argument when insert failed, until f55cc330dec0dec60c755e2ce28a840c7fca1956 "Fixed the fallout of the changes in ScDBCollection" removed the delete (presumably in error?). I put it back in now. All other uses of NamedDBs::insert ignored the return value (witnessed with SAL_WARN_UNUSED_RESULT). Some are insert-if-not-found cases, where I added asserts now (Sc10Import::LoadDataBaseCollection, sc/source/filter/starcalc/scflt.cxx, is not entirely clear to me, so I added a TODO), while others would have potentially leaked the argument, in which cases I fixed the code. Change-Id: Iad40fbeb625c8ce6b0a61cbf16298d71cdc7de80
Diffstat (limited to 'sc/inc/dbdata.hxx')
-rw-r--r--sc/inc/dbdata.hxx3
1 files changed, 2 insertions, 1 deletions
diff --git a/sc/inc/dbdata.hxx b/sc/inc/dbdata.hxx
index 78525b78d821..50ec53c486b1 100644
--- a/sc/inc/dbdata.hxx
+++ b/sc/inc/dbdata.hxx
@@ -177,7 +177,8 @@ public:
const_iterator end() const;
ScDBData* findByIndex(sal_uInt16 nIndex);
ScDBData* findByUpperName(const OUString& rName);
- bool insert(ScDBData* p);
+ // Takes ownership of p iff it returns true:
+ SAL_WARN_UNUSED_RESULT bool insert(ScDBData* p);
void erase(iterator itr);
void erase(const ScDBData& r);
bool empty() const;