diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
commit | 36d22d82aa202bb199967e9512281e9a53db42c9 (patch) | |
tree | 105e8c98ddea1c1e4784a60a5a6410fa416be2de /js/src/tests/non262/String/replace-bad-dollar-single-quote.js | |
parent | Initial commit. (diff) | |
download | firefox-esr-upstream.tar.xz firefox-esr-upstream.zip |
Adding upstream version 115.7.0esr.upstream/115.7.0esrupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'js/src/tests/non262/String/replace-bad-dollar-single-quote.js')
-rw-r--r-- | js/src/tests/non262/String/replace-bad-dollar-single-quote.js | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/js/src/tests/non262/String/replace-bad-dollar-single-quote.js b/js/src/tests/non262/String/replace-bad-dollar-single-quote.js new file mode 100644 index 0000000000..a39f1b6b6f --- /dev/null +++ b/js/src/tests/non262/String/replace-bad-dollar-single-quote.js @@ -0,0 +1,61 @@ +let evil = new RegExp(); + +// https://tc39.es/ecma262/#sec-getsubstitution + +// Input: position = 0 +// Step 2: matchLength = 7 +// Step 4: stringLength = 3 +// Step 8: tailPos = position + matchLength = 7 +// +// tailPos ≥ stringLength, so $' is replaced with the empty string. + +evil.exec = () => ({ 0: "1234567", length: 1, index: 0 }); +assertEq("abc".replace(evil, "$'"), ""); + + +// Input: position = 3 +// Step 2: matchLength = 1 +// Step 4: stringLength = 3 +// Step 8: tailPos = position + matchLength = 4 +// +// tailPos ≥ stringLength, so $' is replaced with the empty string. + +evil.exec = () => ({ 0: "x", length: 1, index: 3 }); +assertEq("abc".replace(evil, "$'"), "abc"); + + +// Input: position = 2 +// Step 2: matchLength = 1 +// Step 4: stringLength = 3 +// Step 8: tailPos = position + matchLength = 3 +// +// tailPos ≥ stringLength, so $' is replaced with the empty string. + +evil.exec = () => ({ 0: "x", length: 1, index: 2 }); +assertEq("abc".replace(evil, "$'"), "ab"); + + +// Input: position = 2 +// Step 2: matchLength = 1 +// Step 4: stringLength = 4 +// Step 8: tailPos = position + matchLength = 3 +// +// tailPos < stringLength, so $' is replaced with |"abcd".sustring(tailPos)| = "d". + +evil.exec = () => ({ 0: "x", length: 1, index: 2 }); +assertEq("abcd".replace(evil, "$'"), "abdd"); + + +// Input: position = 2 +// Step 2: matchLength = 1 +// Step 4: stringLength = 5 +// Step 8: tailPos = position + matchLength = 3 +// +// tailPos < stringLength, so $' is replaced with |"abcd".sustring(tailPos)| = "de". + +evil.exec = () => ({ 0: "x", length: 1, index: 2 }); +assertEq("abcde".replace(evil, "$'"), "abdede"); + + +if (typeof reportCompare === "function") + reportCompare(0, 0); |