2010-08-23 Michael Saboff <msaboff@apple.com>
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 23 Aug 2010 23:12:46 +0000 (23:12 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 23 Aug 2010 23:12:46 +0000 (23:12 +0000)
        Reviewed by Oliver Hunt.

        Fixed case where a single character search string in a string.replace()
        did not properly handle back reference replacement.  The fix is to
        check for a '$' as part of the check to see if we can execute the
        single character replace optimization.
        https://bugs.webkit.org/show_bug.cgi?id=44067

        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncReplace):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@65840 268f45cc-cd09-0410-ab3c-d52691b4dbfc

JavaScriptCore/ChangeLog
JavaScriptCore/runtime/StringPrototype.cpp

index c9a2f14..80e9dac 100644 (file)
@@ -1,3 +1,16 @@
+2010-08-23  Michael Saboff  <msaboff@apple.com>
+
+        Reviewed by Oliver Hunt.
+
+        Fixed case where a single character search string in a string.replace()
+        did not properly handle back reference replacement.  The fix is to 
+        check for a '$' as part of the check to see if we can execute the
+        single character replace optimization.
+        https://bugs.webkit.org/show_bug.cgi?id=44067
+
+        * runtime/StringPrototype.cpp:
+        (JSC::stringProtoFuncReplace):
+
 2010-08-23  Oliver Hunt  <oliver@apple.com>
 
         Reviewed by Gavin Barraclough.
index cfbb3be..91e9b06 100644 (file)
@@ -425,9 +425,10 @@ EncodedJSValue JSC_HOST_CALL stringProtoFuncReplace(ExecState* exec)
     // Not a regular expression, so treat the pattern as a string.
 
     UString patternString = pattern.toString(exec);
-    if (patternString.length() == 1 && callType == CallTypeNone)
+    // Special case for single character patterns without back reference replacement
+    if (patternString.length() == 1 && callType == CallTypeNone && replacementString.find('$', 0) == notFound)
         return JSValue::encode(sourceVal->replaceCharacter(exec, patternString[0], replacementString));
-    
+
     const UString& source = sourceVal->value(exec);
     size_t matchPos = source.find(patternString);