diff --git a/js/src/irregexp/RegExpEngine.cpp b/js/src/irregexp/RegExpEngine.cpp index 11ed5c3f98d..32366f34350 100644 --- a/js/src/irregexp/RegExpEngine.cpp +++ b/js/src/irregexp/RegExpEngine.cpp @@ -1001,7 +1001,7 @@ ChoiceNode::FilterASCII(int depth, bool ignore_case) } } - alternatives_.appendAll(new_alternatives); + alternatives_ = Move(new_alternatives); return this; } diff --git a/js/src/jit-test/tests/basic/bug1081175.js b/js/src/jit-test/tests/basic/bug1081175.js new file mode 100644 index 00000000000..32766d76807 --- /dev/null +++ b/js/src/jit-test/tests/basic/bug1081175.js @@ -0,0 +1,20 @@ +var input = "webkit-search-cancel-button-aaaaaaa-bbbbb-ccccccc-dddddddd," +var bad_regex = '([a-u-]|\\u0080|\\u0100)*[d]'; + +function forceUnicode(s) { + return ('\uffff' + s).replace(/^\uffff/, ''); +} +function testRegex(input) { + for (var i = 0; i < input.length; i++) { + var sub = input.substring(0, i + 1); + var res = sub.match(bad_regex); + if (i >= 50) { + assertEq(res.length, 2); + assertEq(res[1], sub.substr(-2, 1)); + } else { + assertEq(res, null); + } + } +} +testRegex(input); +testRegex(forceUnicode(input));