Remove the memory leak on osp-security-service
authorhb.min <hb.min@samsung.com>
Thu, 24 Oct 2013 19:22:08 +0000 (04:22 +0900)
committerhb.min <hb.min@samsung.com>
Thu, 24 Oct 2013 19:22:08 +0000 (04:22 +0900)
Change-Id: I034f1ee6fa3830b3c8149776b2b3bb8e16134bf1
Signed-off-by: hb.min <hb.min@samsung.com>
src/security/FSecAccessController.cpp
src/security/FSec_AccessController.cpp
src/security/inc/FSec_PrivilegeManagerMessage.h
src/server/appfw/inc/FSec_PrivilegeManagerServer.h
src/server/appfw/security/FSec_PrivilegeManagerServer.cpp

index 0249383..fbc43b9 100644 (file)
@@ -28,6 +28,8 @@
 #include <FBaseSysLog.h>
 #include <FBaseString.h>
 #include <FBaseColArrayList.h>
+#include <FBaseColArrayListT.h>
+#include <FBaseColIEnumeratorT.h>
 #include <FIoFile.h>
 #include <FIo_IpcClient.h>
 #include <FSecAccessController.h>
@@ -101,18 +103,32 @@ AccessController::Initialize(void)
        std::unique_ptr<String> pChecksum(new (std::nothrow) String());
        SysTryReturnVoidResult(NID_SEC, pChecksum != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
 
-       std::unique_ptr<ArrayList> 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<IPC::Message> pCipherPrivilegeMessage(new (std::nothrow) PrivilegeManagerMsg_retrieve(pEncryptedPrivileges.get(), pChecksum.get(), pPrivilegeList.get(), &r));
+       std::unique_ptr<IPC::Message> 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<ArrayList> pPrivilegeList(new ArrayList());
+       SysTryReturnVoidResult(NID_SEC, pPrivilegeList != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
+
+       pPrivilegeList->Construct();
+
+       std::unique_ptr<IEnumeratorT< String > > pEnum(pPrivilegeListT->GetEnumeratorN());
+       while (pEnum->MoveNext() == E_SUCCESS)
+       {
+               String tempString;
+               pEnum->GetCurrent(tempString);
+               pPrivilegeList->Add(new String(tempString));
+       }
+       pPrivilegeListT->RemoveAll();
+
        std::unique_ptr<String> pEncryptedVisibility(new (std::nothrow) String());
        SysTryReturnVoidResult(NID_SEC, pEncryptedVisibility != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
 
index d7a7420..958c2f0 100644 (file)
@@ -28,6 +28,7 @@
 #include <FBaseSysLog.h>
 #include <FBaseString.h>
 #include <FBaseColArrayList.h>
+#include <FBaseColArrayListT.h>
 #include <FBase_StringConverter.h>
 #include <FIoFile.h>
 #include <FIo_IpcClient.h>
@@ -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<IPC::Message> pCipherPrivilegeMessage(new (std::nothrow) PrivilegeManagerMsg_retrieve(pEncryptedPrivileges.get(), pChecksum.get(), pPrivilegeList.get(), &r));
+       std::unique_ptr<IPC::Message> 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<IEnumeratorT< String > > 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;
index 7222d14..22f7930 100644 (file)
@@ -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)
index 1021c4b..c62920e 100644 (file)
@@ -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);
index b6fcecc..b2abdb3 100644 (file)
@@ -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<String*>(pEnum->GetCurrent());
-                       pPrivilegeList->Add(new String(*tempString));
+                       pPrivilegeList->Add(*tempString);
                }
 
                delete pEnum;