Fix memory leak
[platform/core/appfw/wgt-backend.git] / src / wgt / step / configuration / step_parse.cc
index 17a3ef9..8edeb06 100644 (file)
@@ -31,6 +31,7 @@
 #include <wgt_manifest_handlers/w3c_pc_utils.h>
 
 #include <pkgmgr/pkgmgr_parser.h>
+#include <pkgmgrinfo_basic.h>
 
 #include <string.h>
 
@@ -392,8 +393,11 @@ bool StepParse::FillMainApplicationInfo(manifest_x* manifest) {
   application->launch_mode = strdup(app_info->launch_mode().c_str());
   for (auto& icon : GListRange<icon_x*>(manifest->icon)) {
     icon_x* app_icon = reinterpret_cast<icon_x*>(calloc(1, sizeof(icon_x)));
-    if (!app_icon)
+    if (!app_icon) {
+      LOG(ERROR) << "Out of memory";
+      pkgmgrinfo_basic_free_application(application);
       return false;
+    }
     app_icon->text = strdup(icon->text);
     app_icon->lang = strdup(icon->lang);
     application->icon = g_list_append(application->icon, app_icon);
@@ -442,8 +446,11 @@ bool StepParse::FillServiceApplicationInfo(manifest_x* manifest) {
       bf::path icon_path = context_->root_application_path.get()
           / manifest->package / "res" / "wgt" / service_info.icon();
       icon_x* icon = reinterpret_cast<icon_x*>(calloc(1, sizeof(icon_x)));
-      if (!icon)
+      if (!icon) {
+        LOG(ERROR) << "Out of memory";
+        pkgmgrinfo_basic_free_application(application);
         return false;
+      }
       icon->text = strdup(icon_path.c_str());
       icon->lang = strdup(DEFAULT_LOCALE);
       application->icon = g_list_append(application->icon, icon);
@@ -504,8 +511,11 @@ bool StepParse::FillWidgetApplicationInfo(manifest_x* manifest) {
 
     if (!app_widget.icon_src.empty()) {
       icon_x* icon = reinterpret_cast<icon_x*>(calloc(1, sizeof(icon_x)));
-      if (!icon)
+      if (!icon) {
+        LOG(ERROR) << "Out of memory";
+        pkgmgrinfo_basic_free_application(application);
         return false;
+      }
       icon->text = strdup(app_widget.icon_src.c_str());
       icon->lang = strdup(DEFAULT_LOCALE);
       application->icon = g_list_append(application->icon, icon);