Common: Fix a potential infinite loop in ReplaceAll
Prior to this change, it was possible to cause an infinite loop by making the string to be replaced and the replacing string the same thing. e.g. std::string some_str = "test"; ReplaceAll(some_str, "test", "test"); This also changes the replacing in a way that doesn't require starting from the beginning of the string on each replacement iteration.
This commit is contained in:
parent
0576046fdd
commit
3e0c04a83e
|
@ -281,12 +281,17 @@ std::string TabsToSpaces(int tab_size, const std::string &in)
|
|||
|
||||
std::string ReplaceAll(std::string result, const std::string& src, const std::string& dest)
|
||||
{
|
||||
while (1)
|
||||
size_t pos = 0;
|
||||
|
||||
if (src == dest)
|
||||
return result;
|
||||
|
||||
while ((pos = result.find(src, pos)) != std::string::npos)
|
||||
{
|
||||
size_t pos = result.find(src);
|
||||
if (pos == std::string::npos) break;
|
||||
result.replace(pos, src.size(), dest);
|
||||
pos += dest.length();
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue