From aea190e3d3704eb83e53c5d9b2dd4fb0d4afb406 Mon Sep 17 00:00:00 2001 From: Lukasz Marek Date: Tue, 14 May 2013 13:15:02 +0200 Subject: [PATCH] Prevent fix [Issue#] N/A [Problem] Memory leak found. [Cause] N/A [Solution] Release resources. [Verification] Compile repository, install any widget. Change-Id: If73441a222fb0c96bc2bc426726176ca3c770a8d --- src/jobs/widget_install/task_smack.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/jobs/widget_install/task_smack.cpp b/src/jobs/widget_install/task_smack.cpp index a007bf7..df49edd 100644 --- a/src/jobs/widget_install/task_smack.cpp +++ b/src/jobs/widget_install/task_smack.cpp @@ -142,7 +142,7 @@ void TaskSmack::StepSmackFolderLabeling() free(m_pkgId); - /* TODO : set label at wrt-client + /* TODO : set label at wrt-client std::string app = DPL::ToUTF8String(m_context.widgetConfig.tzAppid); char* appId = NULL; @@ -188,7 +188,7 @@ void TaskSmack::StepSmackPrivilege() LogInfo("----------------> SMACK:\ Jobs::WidgetInstall::TaskSmack::SmackPrivilegeStep()"); #ifdef WRT_SMACK_ENABLED - /* TODO : + /* TODO : std::string id = DPL::ToUTF8String(m_context.widgetConfig.tzAppid); */ std::string id = DPL::ToUTF8String(m_context.widgetConfig.tzPkgid); @@ -199,24 +199,29 @@ void TaskSmack::StepSmackPrivilege() WrtDB::ConfigParserData::PrivilegeList privileges = m_context.widgetConfig.configInfo.privilegeList; - const char** perm_list = new const char*[privileges.size() + 1]; + char** perm_list = new char*[privileges.size() + 1]; int index = 0; FOREACH(it, privileges) { LogInfo("Permission : " << it->name); int length = DPL::ToUTF8String(it->name).length(); - char *priv = (char*) calloc(1, (sizeof(char) * length) + 1); + char *priv = new char[length + 1]; snprintf(priv, length + 1, "%s", - DPL::ToUTF8String(it->name).c_str()); + DPL::ToUTF8String(it->name).c_str()); perm_list[index++] = priv; } perm_list[index] = NULL; if (PC_OPERATION_SUCCESS != app_enable_permissions(appId, APP_TYPE_WGT, - perm_list, true)) { + const_cast(perm_list), true)) { LogError("failure in contructing smack rules based on perm_list"); } free(appId); + index = 0; + while (NULL != perm_list[index]) { + delete [] perm_list[index++]; + } + delete [] perm_list; m_context.job->UpdateProgress( InstallerContext::INSTALL_SMACK_ENABLE, -- 2.7.4