From: Krzysztof Jackiewicz Date: Mon, 19 Jun 2023 07:34:16 +0000 (+0200) Subject: [Keymanager] Fix alias tokenizing X-Git-Tag: accepted/tizen/6.5/unified/20230621.125857^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=dcdb77a183a3291a36402be6a4487445acc620d0;p=platform%2Fcore%2Fapi%2Fwebapi-plugins.git [Keymanager] Fix alias tokenizing There are 2 problems with key-manager alias tokenizing code: 1. strtok_r() used for tokenizing affects internal/opaque key-manager's structure ckmc_alias_info_s by modifying the string pointed by the pointer returned from ckmc_alias_info_get_alias(). As a result, the following call to ckmc_alias_info_is_password_protected(), that uses this structure, fails. 2. strtok_r() splits the string when *any* of characters passed in 'delim' argument is found. However, the ckmc_owner_id_separator is in fact a string, not a set of delimiting characters. It's current value is ' ' which happens to work well with strtok_r() but this is also a part of internal key-manager's code and may be changed in future. Fix above by locating a complete ckmc_owner_id_separator substring and tokenizing it without modifying the original string. Change-Id: I86a4dcbb36dad98219acf32a69d9bbb4164c83b4 --- diff --git a/src/keymanager/keymanager_instance.cc b/src/keymanager/keymanager_instance.cc index 9bb567b..ec1b72b 100644 --- a/src/keymanager/keymanager_instance.cc +++ b/src/keymanager/keymanager_instance.cc @@ -106,17 +106,14 @@ void KeyManagerInstance::KeyManagerGetDataAliasList(const picojson::value& args, ReportError(error, &out); return; } - LoggerD("Alias name: %s", name); - char* saveptr = nullptr; - char* tokenized = strtok_r(name, kSpace.c_str(), &saveptr); - if (nullptr != tokenized) { - obj["packageId"] = picojson::value(tokenized); - } + LoggerD("Alias name: %s", name); - tokenized = strtok_r(nullptr, kSpace.c_str(), &saveptr); - if (nullptr != tokenized) { - obj["name"] = picojson::value(tokenized); + auto separator = strstr(name, kSpace.c_str()); + if (separator != NULL && strlen(name) > separator - name + kSpace.size()) { + std::string packageId(name, separator); + obj["packageId"] = picojson::value(std::move(packageId)); + obj["name"] = picojson::value(&separator[kSpace.size()]); } bool is_password_protected = false;