std::string uses static buffer for empty string values. When
std::transform iterates over initialized std::string elements
and copies their changed values to empty std::string by using
its random access iterator, the buffer which is used by
std::string for empty strings is overriden, what later makes
all strings, that are supposed to be empty, not empty.
Change-Id: I5acb9e038febabbf4b1e1d56d736f75dc227c0af
std::string GetLocalizedKey(const std::string& key,
const std::string& local) {
std::string lower_local;
- std::transform(local.begin(), local.end(), lower_local.begin(), ::tolower);
+ std::transform(local.begin(), local.end(),
+ std::insert_iterator<std::string>(lower_local,
+ lower_local.begin()),
+ ::tolower);
if (lower_local.empty())
lower_local = kLocaleUnlocalized;
return key + kPathConnectSymbol + lower_local;