From 9663f301c007e5503a08505edff54b8521eb7949 Mon Sep 17 00:00:00 2001 From: "hb.min" Date: Fri, 25 Oct 2013 04:22:08 +0900 Subject: [PATCH] Remove the memory leak on osp-security-service Change-Id: I034f1ee6fa3830b3c8149776b2b3bb8e16134bf1 Signed-off-by: hb.min --- src/security/FSecAccessController.cpp | 24 +++++++++++++++---- src/security/FSec_AccessController.cpp | 27 +++++++++++++++++----- src/security/inc/FSec_PrivilegeManagerMessage.h | 2 +- src/server/appfw/inc/FSec_PrivilegeManagerServer.h | 2 +- .../appfw/security/FSec_PrivilegeManagerServer.cpp | 4 ++-- 5 files changed, 45 insertions(+), 14 deletions(-) diff --git a/src/security/FSecAccessController.cpp b/src/security/FSecAccessController.cpp index 0249383..fbc43b9 100644 --- a/src/security/FSecAccessController.cpp +++ b/src/security/FSecAccessController.cpp @@ -28,6 +28,8 @@ #include #include #include +#include +#include #include #include #include @@ -101,18 +103,32 @@ AccessController::Initialize(void) std::unique_ptr pChecksum(new (std::nothrow) String()); SysTryReturnVoidResult(NID_SEC, pChecksum != null, E_OUT_OF_MEMORY, "The memory is insufficient."); - std::unique_ptr pPrivilegeList(new ArrayList()); - SysTryReturnVoidResult(NID_SEC, pPrivilegeList != null, E_OUT_OF_MEMORY, "The memory is insufficient."); + std::unique_ptr< ArrayListT< String > > pPrivilegeListT(new ArrayListT< String >()); + SysTryReturnVoidResult(NID_SEC, pPrivilegeListT != null, E_OUT_OF_MEMORY, "The memory is insufficient."); - pPrivilegeList->Construct(); + pPrivilegeListT->Construct(); - std::unique_ptr pCipherPrivilegeMessage(new (std::nothrow) PrivilegeManagerMsg_retrieve(pEncryptedPrivileges.get(), pChecksum.get(), pPrivilegeList.get(), &r)); + std::unique_ptr pCipherPrivilegeMessage(new (std::nothrow) PrivilegeManagerMsg_retrieve(pEncryptedPrivileges.get(), pChecksum.get(), pPrivilegeListT.get(), &r)); SysTryReturnVoidResult(NID_SEC, pCipherPrivilegeMessage != null, E_OUT_OF_MEMORY, "The memory is insufficient."); result ipcResult = pIpcClient->SendRequest(pCipherPrivilegeMessage.get()); SysTryReturnVoidResult(NID_SEC, ipcResult == E_SUCCESS, E_SYSTEM, "Failed to send IPC message."); SysTryReturnVoidResult(NID_SEC, r == E_SUCCESS, r, "Failed to retrieve privilege information"); + std::unique_ptr pPrivilegeList(new ArrayList()); + SysTryReturnVoidResult(NID_SEC, pPrivilegeList != null, E_OUT_OF_MEMORY, "The memory is insufficient."); + + pPrivilegeList->Construct(); + + std::unique_ptr > pEnum(pPrivilegeListT->GetEnumeratorN()); + while (pEnum->MoveNext() == E_SUCCESS) + { + String tempString; + pEnum->GetCurrent(tempString); + pPrivilegeList->Add(new String(tempString)); + } + pPrivilegeListT->RemoveAll(); + std::unique_ptr pEncryptedVisibility(new (std::nothrow) String()); SysTryReturnVoidResult(NID_SEC, pEncryptedVisibility != null, E_OUT_OF_MEMORY, "The memory is insufficient."); diff --git a/src/security/FSec_AccessController.cpp b/src/security/FSec_AccessController.cpp index d7a7420..958c2f0 100644 --- a/src/security/FSec_AccessController.cpp +++ b/src/security/FSec_AccessController.cpp @@ -28,6 +28,7 @@ #include #include #include +#include #include #include #include @@ -312,17 +313,31 @@ _AccessController::Initialize(void) pChecksum.reset(new (std::nothrow) String()); SysTryReturnVoidResult(NID_SEC, pChecksum != null, E_OUT_OF_MEMORY, "The memory is insufficient."); - pPrivilegeList.reset(new ArrayList()); - SysTryReturnVoidResult(NID_SEC, pPrivilegeList != null, E_OUT_OF_MEMORY, "The memory is insufficient."); - pPrivilegeList->Construct(); + std::unique_ptr< ArrayListT< String > > pPrivilegeListT(new ArrayListT< String >()); + SysTryReturnVoidResult(NID_SEC, pPrivilegeListT != null, E_OUT_OF_MEMORY, "The memory is insufficient."); + + pPrivilegeListT->Construct(); - std::unique_ptr pCipherPrivilegeMessage(new (std::nothrow) PrivilegeManagerMsg_retrieve(pEncryptedPrivileges.get(), pChecksum.get(), pPrivilegeList.get(), &r)); + std::unique_ptr pCipherPrivilegeMessage(new (std::nothrow) PrivilegeManagerMsg_retrieve(pEncryptedPrivileges.get(), pChecksum.get(), pPrivilegeListT.get(), &r)); SysTryReturnVoidResult(NID_SEC, pCipherPrivilegeMessage != null, E_OUT_OF_MEMORY, "The memory is insufficient."); result ipcResult = pIpcClient->SendRequest(pCipherPrivilegeMessage.get()); SysTryReturnVoidResult(NID_SEC, ipcResult == E_SUCCESS, E_SYSTEM, "Failed to send IPC message."); SysTryReturnVoidResult(NID_SEC, r == E_SUCCESS, r, "Failed to retrieve privilege information"); + pPrivilegeList.reset(new ArrayList(SingleObjectDeleter)); + SysTryReturnVoidResult(NID_SEC, pPrivilegeList != null, E_OUT_OF_MEMORY, "The memory is insufficient."); + pPrivilegeList->Construct(); + + std::unique_ptr > pEnum(pPrivilegeListT->GetEnumeratorN()); + while (pEnum->MoveNext() == E_SUCCESS) + { + String tempString; + pEnum->GetCurrent(tempString); + pPrivilegeList->Add(new String(tempString)); + } + pPrivilegeListT->RemoveAll(); + pEncryptedVisibility.reset(new (std::nothrow) String()); SysTryReturnVoidResult(NID_SEC, pEncryptedVisibility != null, E_OUT_OF_MEMORY, "The memory is insufficient."); @@ -594,7 +609,7 @@ _AccessController::CheckPrivacy(const PackageId & packageId, _Privilege privileg if (ret != PRIV_MGR_ERROR_SUCCESS) { r = E_USER_NOT_CONSENTED; - SysLog(NID_SEC, "Result : FALSE [Privacy]"); + SysLog(NID_SEC, "Result: FALSE [Privacy]"); } return r; @@ -617,7 +632,7 @@ _AccessController::CheckPrivacy(const PackageId & packageId, const String& privi if (ret != PRIV_MGR_ERROR_SUCCESS) { r = E_USER_NOT_CONSENTED; - SysLog(NID_SEC, "Result : FALSE [Privacy]"); + SysLog(NID_SEC, "Result: FALSE [Privacy]"); } return r; diff --git a/src/security/inc/FSec_PrivilegeManagerMessage.h b/src/security/inc/FSec_PrivilegeManagerMessage.h index 7222d14..22f7930 100644 --- a/src/security/inc/FSec_PrivilegeManagerMessage.h +++ b/src/security/inc/FSec_PrivilegeManagerMessage.h @@ -25,5 +25,5 @@ #define IPC_MESSAGE_START PrivilegeManagerMsgStart -IPC_SYNC_MESSAGE_CONTROL0_4(PrivilegeManagerMsg_retrieve, Tizen::Base::String, Tizen::Base::String, Tizen::Base::Collection::ArrayList, result) +IPC_SYNC_MESSAGE_CONTROL0_4(PrivilegeManagerMsg_retrieve, Tizen::Base::String, Tizen::Base::String, Tizen::Base::Collection::ArrayListT< Tizen::Base::String >, result) IPC_SYNC_MESSAGE_CONTROL0_3(PrivilegeManagerMsg_retrieveEx, Tizen::Base::String, Tizen::Base::String, result) diff --git a/src/server/appfw/inc/FSec_PrivilegeManagerServer.h b/src/server/appfw/inc/FSec_PrivilegeManagerServer.h index 1021c4b..c62920e 100644 --- a/src/server/appfw/inc/FSec_PrivilegeManagerServer.h +++ b/src/server/appfw/inc/FSec_PrivilegeManagerServer.h @@ -61,7 +61,7 @@ private: _PrivilegeManagerServer(void); virtual ~_PrivilegeManagerServer(void); - static result RetrievePrivilege(const Tizen::App::AppId& appId, Tizen::Base::String* pEncryptedBitwise, Tizen::Base::String* pHmac, Tizen::Base::Collection::ArrayList*& pPrivilegeList); + static result RetrievePrivilege(const Tizen::App::AppId& appId, Tizen::Base::String* pEncryptedBitwise, Tizen::Base::String* pHmac, Tizen::Base::Collection::ArrayListT < Tizen::Base::String >*& pPrivilegeList); static result GenerateVisibilityString(Tizen::App::AppId appId, Tizen::Base::String* pEncryptedVisibility, Tizen::Base::String* pHmac); static result GetEncryptedVisibility(int visibility, Tizen::Base::String& encryptedVisibility); static result GetChecksum(Tizen::App::AppId appId, int visibility, Tizen::Base::String& checksum); diff --git a/src/server/appfw/security/FSec_PrivilegeManagerServer.cpp b/src/server/appfw/security/FSec_PrivilegeManagerServer.cpp index b6fcecc..b2abdb3 100644 --- a/src/server/appfw/security/FSec_PrivilegeManagerServer.cpp +++ b/src/server/appfw/security/FSec_PrivilegeManagerServer.cpp @@ -61,7 +61,7 @@ _PrivilegeManagerServer::~_PrivilegeManagerServer(void) } result -_PrivilegeManagerServer::RetrievePrivilege(const AppId& appId, String* pEncryptedBitwise, String* pHmac, ArrayList*& pPrivilegeList) +_PrivilegeManagerServer::RetrievePrivilege(const AppId& appId, String* pEncryptedBitwise, String* pHmac, ArrayListT < String >*& pPrivilegeList) { result r = E_SUCCESS; String encryptedBitwise; @@ -81,7 +81,7 @@ _PrivilegeManagerServer::RetrievePrivilege(const AppId& appId, String* pEncrypte while (pEnum->MoveNext() == E_SUCCESS) { String* tempString = static_cast(pEnum->GetCurrent()); - pPrivilegeList->Add(new String(*tempString)); + pPrivilegeList->Add(*tempString); } delete pEnum; -- 2.7.4