Merge pull request #86052 from TheSofox/regex-sub-fix

Fix `RegEx.sub` truncating string when `end` is used
This commit is contained in:
Rémi Verschelde 2024-02-20 15:47:08 +01:00
commit 12de2f1f70
No known key found for this signature in database
GPG Key ID: C3336907360768E1
2 changed files with 13 additions and 1 deletions

View File

@ -334,7 +334,7 @@ String RegEx::sub(const String &p_subject, const String &p_replacement, bool p_a
return String();
}
return String(output.ptr(), olength);
return String(output.ptr(), olength) + p_subject.substr(length);
}
bool RegEx::is_valid() const {

View File

@ -133,6 +133,18 @@ TEST_CASE("[RegEx] Substitution") {
RegEx re4("(a)(b){0}(c)");
REQUIRE(re4.is_valid());
CHECK(re4.sub(s4, "${1}.${3}.", true) == "a.c.a.c.a.c.");
const String s5 = "aaaa";
RegEx re5("a");
REQUIRE(re5.is_valid());
CHECK(re5.sub(s5, "b", true, 0, 2) == "bbaa");
CHECK(re5.sub(s5, "b", true, 1, 3) == "abba");
CHECK(re5.sub(s5, "b", true, 0, 0) == "aaaa");
CHECK(re5.sub(s5, "b", true, 1, 1) == "aaaa");
CHECK(re5.sub(s5, "cc", true, 0, 2) == "ccccaa");
CHECK(re5.sub(s5, "cc", true, 1, 3) == "acccca");
CHECK(re5.sub(s5, "", true, 0, 2) == "aa");
}
TEST_CASE("[RegEx] Substitution with empty input and/or replacement") {