From c23bae185c383daa32ece596930d59759e07b300 Mon Sep 17 00:00:00 2001 From: Sean Stangl Date: Mon, 1 Apr 2013 15:35:27 -0700 Subject: [PATCH] Bug 854124 - Update RegExpStatics on empty match in str_replace_regexp_remove(). r=dvander --- js/src/jit-test/tests/basic/bug854124.js | 8 ++++++++ js/src/jsstr.cpp | 8 +++++--- 2 files changed, 13 insertions(+), 3 deletions(-) create mode 100644 js/src/jit-test/tests/basic/bug854124.js diff --git a/js/src/jit-test/tests/basic/bug854124.js b/js/src/jit-test/tests/basic/bug854124.js new file mode 100644 index 000000000000..505ed2dfb670 --- /dev/null +++ b/js/src/jit-test/tests/basic/bug854124.js @@ -0,0 +1,8 @@ +// Don't assert. +"p".match(/(p)/); +assertEq(RegExp.$1, "p"); +assertEq(RegExp.$2, ""); + +"x\ny\n".replace(/(^\n*)/, ""); +assertEq(RegExp.$1, ""); +assertEq(RegExp.$2, ""); diff --git a/js/src/jsstr.cpp b/js/src/jsstr.cpp index f20af7d4baf0..c1dec117b3e2 100644 --- a/js/src/jsstr.cpp +++ b/js/src/jsstr.cpp @@ -2465,16 +2465,18 @@ str_replace_regexp_remove(JSContext *cx, CallArgs args, HandleString str, RegExp lazyIndex = lastIndex; lastIndex = startIndex; + if (match.isEmpty()) + startIndex++; + /* Non-global removal executes at most once. */ if (!re.global()) break; - - if (match.isEmpty()) - startIndex++; } /* If unmatched, return the input string. */ if (!lastIndex) { + if (startIndex > 0) + cx->regExpStatics()->updateLazily(cx, stableStr, &re, lazyIndex); args.rval().setString(str); return true; }