Fix bug : sometimes failed to get root CA 87/49187/4 accepted/tizen/mobile/20151008.134425 accepted/tizen/tv/20151008.134454 accepted/tizen/wearable/20151008.134518 submit/tizen/20151008.063000
authorKyungwook Tak <k.tak@samsung.com>
Thu, 8 Oct 2015 06:09:06 +0000 (15:09 +0900)
committerKyungwook Tak <k.tak@samsung.com>
Thu, 8 Oct 2015 06:16:03 +0000 (15:16 +0900)
[Problem]      Sometimes failed to complete cert chain
[Cause]        getNameHash function return type is std::string.
               But searchByHash function get returned value and use it as .c_str() directly.
               So rvalue isn't saved properly and sometimes it goes to be empty.
[Solution]     Get returned std::string to proper variable(lvalue with std::string)
[Verification] Try 50 times to install sample tpk and no error occured.

Change-Id: Ic4b6e72c0f791546f04f7b37c6f2d1c9c40d1f8a
Signed-off-by: Kyungwook Tak <k.tak@samsung.com>
vcore/vcore/CertificateCollection.cpp

index 89b190d..7223b4e 100644 (file)
@@ -57,7 +57,7 @@ inline std::string toBinaryString(int data)
 CertificatePtr searchCertByHash(const std::string &dir, const CertificatePtr &certPtr)
 {
        try {
-               const char *hash = certPtr->getNameHash(Certificate::FIELD_ISSUER).c_str();
+               std::string hash = certPtr->getNameHash(Certificate::FIELD_ISSUER);
 
                std::unique_ptr<DIR, std::function<int(DIR*)>> dp(::opendir(dir.c_str()), ::closedir);
                if (dp.get() == NULL) {
@@ -79,7 +79,7 @@ CertificatePtr searchCertByHash(const std::string &dir, const CertificatePtr &ce
                        if (strlen(dirp->d_name) != 10)
                                continue;
 
-                       if (strncmp(dirp->d_name, hash, 8) != 0)
+                       if (strncmp(dirp->d_name, hash.c_str(), 8) != 0)
                                continue;
 
                        LogDebug("Found hash matched file! : " << (dir + dirp->d_name));