Fix resource leak 59/281459/1
authorHwankyu Jhun <h.jhun@samsung.com>
Mon, 19 Sep 2022 07:45:29 +0000 (07:45 +0000)
committerHwankyu Jhun <h.jhun@samsung.com>
Mon, 19 Sep 2022 07:45:29 +0000 (07:45 +0000)
The allocated memory has to be released. The xmlGetProp() returns the
allocated value. It should be released using xmlFree().

Change-Id: I031d76c587ad8dcab9141c585d732893d916eea9
Signed-off-by: Hwankyu Jhun <h.jhun@samsung.com>
src/launchpad-parser/launchpad_parser_plugin.cc

index f87367328a200a336f0dc422b46ec96d7643f596..d8b23c085c89b25feaa6b4f2efa957e71219d03f 100644 (file)
@@ -103,15 +103,21 @@ int LaunchpadParser::Install(xmlDocPtr doc, std::string pkgid) {
       continue;
 
     xmlChar* val = xmlGetProp(node, reinterpret_cast<const xmlChar*>("id"));
+    if (val == nullptr)
+      continue;
+
     std::shared_ptr<LoaderInfo> info =
         std::make_shared<LoaderInfo>(std::string(reinterpret_cast<char*>(val)));
+    xmlFree(val);
     if (!IsValidId(info->GetId(), pkgid))
       return -1;
 
     xmlChar* ttl = xmlGetProp(node,
         reinterpret_cast<const xmlChar*>("time-to-live"));
-    if (ttl)
+    if (ttl) {
       info->SetTimeToLive(std::stoi(std::string(reinterpret_cast<char*>(ttl))));
+      xmlFree(ttl);
+    }
 
     for (xmlNode* iter = node->children; iter; iter = iter->next) {
       if (!iter->name)
@@ -120,10 +126,11 @@ int LaunchpadParser::Install(xmlDocPtr doc, std::string pkgid) {
           std::string(reinterpret_cast<const char*>(iter->name));
       if (child_name == "preload-library") {
         xmlChar* libname = xmlGetProp(iter,
-           reinterpret_cast<const xmlChar*>("name"));
+            reinterpret_cast<const xmlChar*>("name"));
         if (!libname)
           continue;
         info->AddPreloadLib(std::string(reinterpret_cast<char*>(libname)));
+        xmlFree(libname);
       }
     }
     loader_list_.push_back(info);
@@ -158,6 +165,7 @@ int LaunchpadParser::UnInstall(xmlDocPtr doc, std::string pkgid) {
       return -1;
 
     std::string id = std::string(reinterpret_cast<char*>(val));
+    xmlFree(val);
     if (!IsValidId(id, pkgid))
       return -1;
     remove(GetFilePath(id).c_str());