[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>
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) {
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));