Fix string buffer overwrite 16/36216/2
authorJakub Izydorczyk <j.izydorczyk@samsung.com>
Tue, 3 Mar 2015 13:15:29 +0000 (14:15 +0100)
committerPawel Sikorski <p.sikorski@samsung.com>
Mon, 9 Mar 2015 10:52:54 +0000 (03:52 -0700)
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

index a28ae30..e401a5f 100644 (file)
@@ -33,7 +33,10 @@ typedef std::list<std::string> 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<std::string>(lower_local,
+                                                   lower_local.begin()),
+                 ::tolower);
   if (lower_local.empty())
     lower_local = kLocaleUnlocalized;
   return key + kPathConnectSymbol + lower_local;