fixed ItemOwn::__name potential memory leak 58/173458/4
authorAleksy Barcz <a.barcz@partner.samsung.com>
Wed, 21 Mar 2018 09:33:24 +0000 (10:33 +0100)
committerAleksy Barcz <a.barcz@partner.samsung.com>
Tue, 3 Apr 2018 10:07:06 +0000 (12:07 +0200)
Bugfix. Fixed leaks reported by valgrind.

Change-Id: Icd81120781313b662fad22d17f6ff9dbadc5cf03

src/internal/policy.cpp
src/internal/policy.hpp

index eb3b461..f3937df 100755 (executable)
@@ -248,7 +248,16 @@ const char* DecisionItem::toString(char* str) const {
 ItemOwn::ItemOwn(const char* name,
                                 Decision decision,
                                 const char* privilege)
-       :   __decision(DecisionItem(decision, privilege)), __name(name), __is_prefix(false) {
+       :   __decision(DecisionItem(decision, privilege)), __is_prefix(false) {
+       setName(name);
+}
+
+void ItemOwn::setName(const char* name) {
+       if (name == nullptr) {
+               __name = "";
+       } else {
+               __name = name;
+       }
 }
 
 ItemType ItemOwn::getType() const {
@@ -256,12 +265,15 @@ ItemType ItemOwn::getType() const {
 }
 
 const char* ItemOwn::toString(char* str) const {
-       snprintf(str, MAX_LOG_LINE, "ItemOwn: service(%s), pref(%d)", __name, __is_prefix);
+       snprintf(str, MAX_LOG_LINE, "ItemOwn: service(%s), pref(%d)", __name.c_str(), __is_prefix);
        return str;
 }
 
 const char* ItemOwn::getName() const {
-       return __name;
+       if (__name == "") {
+               return nullptr;
+       }
+       return __name.c_str();
 }
 
 bool ItemOwn::isPrefix() const {
@@ -269,7 +281,7 @@ bool ItemOwn::isPrefix() const {
 }
 
 bool ItemOwn::isMatchAll() const {
-       return __name == nullptr;
+       return __name == "";
 }
 
 const DecisionItem& ItemOwn::getDecision() const {
@@ -453,9 +465,7 @@ void ItemBuilder::generateItem(NaivePolicyDb& db, PolicyType& policy_type, Polic
 
 void ItemBuilder::addOwner(const char* owner) {
        ItemOwn* o = getOwnItem();
-       if (o->__name)
-               delete o->__name;
-       o->__name = duplicate(owner);
+       o->setName(owner);
 }
 
 void ItemBuilder::addName(const char* name) {
index abcc0c9..2fb720e 100755 (executable)
@@ -118,8 +118,9 @@ namespace ldp_xml_parser
        class ItemOwn {
        private:
                DecisionItem __decision;
-               const char* __name;
+               std::string __name;
                bool __is_prefix;
+               void setName(const char* name);
        public:
                friend class ItemBuilder;
                ItemOwn(const char* name = NULL,