1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-14 08:24:58 +00:00

AK+Tests: Correct off-by-one error when right-trimming text

If the entire string you want to right-trim consists of characters you
want to remove, we previously would incorrectly leave the first
character there.

For example: `trim("aaaaa", "a")` would return "a" instead of "".

We can't use `i >= 0` in the loop since that would fail to detect
underflow, so instead we keep `i` in the range `size .. 1` and then
subtract 1 from it when reading the character.

Added some trim() tests while I was at it. (And to confirm that this was
the issue.)
This commit is contained in:
Sam Atkins 2022-10-11 14:38:09 +01:00 committed by Andreas Kling
parent 8202beeb2b
commit a0d44026fc
2 changed files with 13 additions and 2 deletions

View file

@ -338,10 +338,10 @@ StringView trim(StringView str, StringView characters, TrimMode mode)
}
if (mode == TrimMode::Right || mode == TrimMode::Both) {
for (size_t i = str.length() - 1; i > 0; --i) {
for (size_t i = str.length(); i > 0; --i) {
if (substring_length == 0)
return ""sv;
if (!characters.contains(str[i]))
if (!characters.contains(str[i - 1]))
break;
--substring_length;
}