Fix for RegEx.sub truncating string when 'end' is used

This commit is contained in:
Sofox 2023-12-12 00:07:07 +00:00
parent b7145638d5
commit 46b420f7ee
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();
} }
return String(output.ptr(), olength); return String(output.ptr(), olength) + p_subject.substr(length);
} }
bool RegEx::is_valid() const { bool RegEx::is_valid() const {

View File

@ -133,6 +133,18 @@ TEST_CASE("[RegEx] Substitution") {
RegEx re4("(a)(b){0}(c)"); RegEx re4("(a)(b){0}(c)");
REQUIRE(re4.is_valid()); REQUIRE(re4.is_valid());
CHECK(re4.sub(s4, "${1}.${3}.", true) == "a.c.a.c.a.c."); 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") { TEST_CASE("[RegEx] Substitution with empty input and/or replacement") {