String.prototype.trim removes U+200B from strings.
authorggaren@apple.com <ggaren@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 29 Apr 2014 19:47:25 +0000 (19:47 +0000)
committerggaren@apple.com <ggaren@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 29 Apr 2014 19:47:25 +0000 (19:47 +0000)
https://bugs.webkit.org/show_bug.cgi?id=130184

Reviewed by Michael Saboff.

Source/JavaScriptCore:
* runtime/StringPrototype.cpp:
(JSC::trimString):
(JSC::isTrimWhitespace): Deleted.

LayoutTests:
* js/script-tests/string-trim.js:
* js/string-trim-expected.txt:

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

LayoutTests/ChangeLog
LayoutTests/js/script-tests/string-trim.js
LayoutTests/js/string-trim-expected.txt
Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/runtime/StringPrototype.cpp

index 75c318a..0ba9357 100644 (file)
@@ -1,3 +1,13 @@
+2014-04-29  Geoffrey Garen  <ggaren@apple.com>
+
+        String.prototype.trim removes U+200B from strings.
+        https://bugs.webkit.org/show_bug.cgi?id=130184
+
+        Reviewed by Michael Saboff.
+
+        * js/script-tests/string-trim.js:
+        * js/string-trim-expected.txt:
+
 2014-04-29  Alexey Proskuryakov  <ap@apple.com>
 
         REGRESSION: Intermittent crash in SpeechSynthesis::didFinishSpeaking
index dbe19d2..5fbd3d5 100644 (file)
@@ -33,7 +33,6 @@ var whitespace      = [
     {s : '\u3000', t : 'IDEOGRAPHIC SPACE'},
     {s : '\u2028', t : 'LINE SEPARATOR'},
     {s : '\u2029', t : 'PARAGRAPH SEPARATOR'},
-    {s : '\u200B', t : 'ZERO WIDTH SPACE (category Cf)'}
 ];
 
 for (var i = 0; i < whitespace.length; i++) {
@@ -63,10 +62,9 @@ shouldBe("rightTrimString.trim()",      "testString");
 shouldBe("rightTrimString.trimLeft()",  "testString");
 shouldBe("rightTrimString.trimRight()", "rightTrimString");
 
-var testValues = ["0", "Infinity", "NaN", "true", "false", "({})", "({toString:function(){return 'wibble'}})", "['an','array']"];
+var testValues = ["0", "Infinity", "NaN", "true", "false", "({})", "({toString:function(){return 'wibble'}})", "['an','array']", "'\u200b'"];
 for (var i = 0; i < testValues.length; i++) {
     shouldBe("trim.call("+testValues[i]+")", "'"+eval(testValues[i])+"'");
     shouldBe("trimLeft.call("+testValues[i]+")", "'"+eval(testValues[i])+"'");
     shouldBe("trimRight.call("+testValues[i]+")", "'"+eval(testValues[i])+"'");
 }
-
index 5c4a2ce..ffde7d2 100644 (file)
@@ -66,9 +66,6 @@ PASS whitespace[19].s.trimRight() is ''
 PASS whitespace[20].s.trim() is ''
 PASS whitespace[20].s.trimLeft() is ''
 PASS whitespace[20].s.trimRight() is ''
-PASS whitespace[21].s.trim() is ''
-PASS whitespace[21].s.trimLeft() is ''
-PASS whitespace[21].s.trimRight() is ''
 PASS wsString.trim() is ''
 PASS wsString.trimLeft() is ''
 PASS wsString.trimRight() is ''
@@ -105,6 +102,9 @@ PASS trimRight.call(({toString:function(){return 'wibble'}})) is 'wibble'
 PASS trim.call(['an','array']) is 'an,array'
 PASS trimLeft.call(['an','array']) is 'an,array'
 PASS trimRight.call(['an','array']) is 'an,array'
+PASS trim.call('​') is '​'
+PASS trimLeft.call('​') is '​'
+PASS trimRight.call('​') is '​'
 PASS successfullyParsed is true
 
 TEST COMPLETE
index f2aa6b9..55491ce 100644 (file)
@@ -1,3 +1,14 @@
+2014-04-29  Geoffrey Garen  <ggaren@apple.com>
+
+        String.prototype.trim removes U+200B from strings.
+        https://bugs.webkit.org/show_bug.cgi?id=130184
+
+        Reviewed by Michael Saboff.
+
+        * runtime/StringPrototype.cpp:
+        (JSC::trimString):
+        (JSC::isTrimWhitespace): Deleted.
+
 2014-04-29  Mark Lam  <mark.lam@apple.com>
 
         Zombifying sweep should ignore retired blocks.
index a3d55f9..c5d7d2b 100644 (file)
@@ -1505,11 +1505,6 @@ enum {
     TrimRight = 2
 };
 
-static inline bool isTrimWhitespace(UChar c)
-{
-    return isStrWhiteSpace(c) || c == 0x200b;
-}
-
 static inline JSValue trimString(ExecState* exec, JSValue thisValue, int trimKind)
 {
     if (!checkObjectCoercible(thisValue))
@@ -1517,12 +1512,12 @@ static inline JSValue trimString(ExecState* exec, JSValue thisValue, int trimKin
     String str = thisValue.toString(exec)->value(exec);
     unsigned left = 0;
     if (trimKind & TrimLeft) {
-        while (left < str.length() && isTrimWhitespace(str[left]))
+        while (left < str.length() && isStrWhiteSpace(str[left]))
             left++;
     }
     unsigned right = str.length();
     if (trimKind & TrimRight) {
-        while (right > left && isTrimWhitespace(str[right - 1]))
+        while (right > left && isStrWhiteSpace(str[right - 1]))
             right--;
     }