1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 17:27:35 +00:00

LibJS: Fix replaceAll crash for overlapping search string positions

The implementation of String.prototype.replaceAll cannot use AK's
implementation of String::find_all when finding the indices of the
search string in the source string. String::find_all will return indices
[0, 1] for String("aaa").find_all("aa") - i.e. it returns overlapping
results. This is not allowed by the JavaScript specification for
replaceAll.
This commit is contained in:
Timothy Flynn 2021-07-05 21:01:05 -04:00 committed by Linus Groh
parent 30615ac2bb
commit 424c7eaa40
2 changed files with 14 additions and 2 deletions

View file

@ -59,6 +59,11 @@ test("basic regex replacement", () => {
expect("abc123def".replaceAll(/\D/g, "*")).toBe("***123***");
expect("123abc456".replaceAll(/\D/g, "*")).toBe("123***456");
expect("aaab a a aac".replaceAll("aa", "z")).toBe("zab a a zc");
expect("aaab a a aac".replaceAll("aa", "a")).toBe("aab a a ac");
expect("aaab a a aac".replaceAll("a", "a")).toBe("aaab a a aac");
expect("aaab a a aac".replaceAll("a", "z")).toBe("zzzb z z zzc");
});
test("functional regex replacement", () => {