From 6b11252b8f3d9936fe3f5d28c063795818a9bc5d Mon Sep 17 00:00:00 2001 From: Tim Wojtulewicz Date: Wed, 11 Sep 2024 11:21:25 +0200 Subject: [PATCH] Fix potential endless loop in util::strreplace --- src/util.cc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/util.cc b/src/util.cc index a83d6d8d3e..be452746cc 100644 --- a/src/util.cc +++ b/src/util.cc @@ -1540,18 +1540,22 @@ TEST_CASE("util strreplace") { string s = "this is not a string"; CHECK(strreplace(s, "not", "really") == "this is really a string"); CHECK(strreplace(s, "not ", "") == "this is a string"); + CHECK(strreplace("\"abc\"", "\"", "\\\"") == "\\\"abc\\\""); + CHECK(strreplace("\\\"abc\\\"", "\\\"", "\"") == "\"abc\""); } string strreplace(const string& s, const string& o, const string& n) { string r = s; + size_t i = 0; while ( true ) { - size_t i = r.find(o); + i = r.find(o, i); if ( i == std::string::npos ) break; r.replace(i, o.size(), n); + i += n.size(); } return r;