From 5f8de423f190bbb79a62f804151bc24824fa32d8 Mon Sep 17 00:00:00 2001 From: "Matt A. Tobin" Date: Fri, 2 Feb 2018 04:16:08 -0500 Subject: Add m-esr52 at 52.6.0 --- js/src/jit-test/tests/basic/bug593663-regexp.js | 109 ++++++++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 js/src/jit-test/tests/basic/bug593663-regexp.js (limited to 'js/src/jit-test/tests/basic/bug593663-regexp.js') diff --git a/js/src/jit-test/tests/basic/bug593663-regexp.js b/js/src/jit-test/tests/basic/bug593663-regexp.js new file mode 100644 index 000000000..10133c300 --- /dev/null +++ b/js/src/jit-test/tests/basic/bug593663-regexp.js @@ -0,0 +1,109 @@ +/* + * Ensure that flat matches with metachars in them don't have their metachars + * interpreted as special. + */ + +function isPatternSyntaxError(pattern) { + try { + new RegExp(pattern); + return false; + } catch (e if e instanceof SyntaxError) { + return true; + } +} + +// Bug example. +assertEq("1+2".replace("1+2", "$&+3"), "1+2+3"); +assertEq("1112".replace("1+2", ""), "1112"); + +// ^ +assertEq("leading text^my hat".replace("^my hat", ""), "leading text"); +assertEq("my hat".replace("^my hat", ""), "my hat"); + +// $ +assertEq("leading text$my money".replace("leading text$", ""), "my money"); +assertEq("leading text".replace("leading text$", ""), "leading text"); + +// \ +var BSL = '\\'; +assertEq(("dir C:" + BSL + "Windoze").replace("C:" + BSL, ""), + "dir Windoze"); +assertEq(isPatternSyntaxError("C:" + BSL), true); + +// . +assertEq("This is a sentence. It has words.".replace(".", "!"), + "This is a sentence! It has words."); +assertEq("This is an unterminated sentence".replace(".", ""), + "This is an unterminated sentence"); + +// * +assertEq("Video killed the radio *".replace(" *", ""), "Video killed the radio"); +assertEq("aaa".replace("a*", ""), "aaa"); + +// + +assertEq("On the + side".replace(" +", ""), "On the side"); +assertEq("1111111111111".replace("1+", ""), "1111111111111"); + +// \+ +assertEq(("Inverse cone head: " + BSL + "++/").replace(BSL + "+", ""), + "Inverse cone head: +/"); +assertEq((BSL + BSL + BSL).replace(BSL + "+", ""), + BSL + BSL + BSL); + +// \\+ +assertEq((BSL + BSL + "+").replace(BSL + BSL + "+", ""), ""); +assertEq((BSL + BSL + BSL).replace(BSL + BSL + "+", ""), (BSL + BSL + BSL)); + +// \\\ +assertEq((BSL + BSL + BSL + BSL).replace(BSL + BSL + BSL, ""), BSL); +assertEq(isPatternSyntaxError(BSL + BSL + BSL), true); + +// \\\\ +assertEq((BSL + BSL + BSL + BSL).replace(BSL + BSL + BSL + BSL, "", "i"), ""); +assertEq((BSL + BSL).replace(BSL + BSL + BSL + BSL, ""), BSL + BSL); + + +// ? +assertEq("Pressing question?".replace("?", "."), "Pressing question."); +assertEq("a".replace("a?", ""), "a"); + +// ( +assertEq("(a".replace("(", ""), "a"); + +// ) +assertEq("a)".replace(")", ""), "a"); + +// ( and ) +assertEq("(foo)".replace("(foo)", ""), ""); +assertEq("a".replace("(a)", ""), "a"); + +// [ +assertEq("[a".replace("[", ""), "a"); + +// ] +assertEq("a]".replace("]", ""), "a"); + +// [ and ] +assertEq("a".replace("[a-z]", ""), "a"); +assertEq("You would write your regexp as [a-z]".replace("[a-z]", ""), + "You would write your regexp as "); + +// { +assertEq("Numbers may be specified in the interval {1,100}".replace("{1,", ""), + "Numbers may be specified in the interval 100}"); + +// } +assertEq("Numbers may be specified in the interval {1,100}".replace(",100}", ""), + "Numbers may be specified in the interval {1"); + +// { and } +assertEq("Numbers may be specified in the interval {1,100}".replace(" {1,100}", ""), + "Numbers may be specified in the interval"); +assertEq("aaa".replace("a{1,10}", ""), "aaa"); + +// | +assertEq("Mr. Gorbachev|Tear down this wall!".replace("|Tear down this wall!", ""), + "Mr. Gorbachev"); +assertEq("foobar".replace("foo|bar", ""), "foobar"); + +print("PASS"); -- cgit v1.2.3