From 8ad27ef7eb033c513fa9ecd8d29aa7ac662278c9 Mon Sep 17 00:00:00 2001 From: Jakub Izydorczyk Date: Tue, 3 Mar 2015 14:15:29 +0100 Subject: [PATCH] Fix string buffer overwrite 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 --- src/widget-manifest-parser/manifest.cc | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/widget-manifest-parser/manifest.cc b/src/widget-manifest-parser/manifest.cc index a28ae30..e401a5f 100644 --- a/src/widget-manifest-parser/manifest.cc +++ b/src/widget-manifest-parser/manifest.cc @@ -33,7 +33,10 @@ typedef std::list List; 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(lower_local, + lower_local.begin()), + ::tolower); if (lower_local.empty()) lower_local = kLocaleUnlocalized; return key + kPathConnectSymbol + lower_local; -- 2.7.4