]> git.kaiwu.me - njs.git/commitdiff
Updated the list of space separators in String.prototype.trim().
authorValentin Bartenev <vbart@nginx.com>
Sun, 28 Jul 2019 10:17:13 +0000 (13:17 +0300)
committerValentin Bartenev <vbart@nginx.com>
Sun, 28 Jul 2019 10:17:13 +0000 (13:17 +0300)
According to the specification it must include all Unicode code points listed
in the "Space_Separator" (Zs) category.

njs/njs_string.c
njs/test/njs_unit_test.c

index 19046f36fb110b59c7fe132016f8ba6febf2db6c..3018ba1d85af8b223a5149f070ad98f8e7f7f12d 100644 (file)
@@ -2425,8 +2425,23 @@ njs_string_prototype_trim(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
             case 0x000D:  /* <CR>   */
             case 0x0020:  /* <SP>   */
             case 0x00A0:  /* <NBSP> */
+            case 0x1680:
+            case 0x2000:
+            case 0x2001:
+            case 0x2002:
+            case 0x2003:
+            case 0x2004:
+            case 0x2005:
+            case 0x2006:
+            case 0x2007:
+            case 0x2008:
+            case 0x2009:
+            case 0x200A:
             case 0x2028:  /* <LS>   */
             case 0x2029:  /* <PS>   */
+            case 0x202F:
+            case 0x205F:
+            case 0x3000:
             case 0xFEFF:  /* <BOM>  */
                 trim++;
                 continue;
@@ -2448,8 +2463,23 @@ njs_string_prototype_trim(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
                     case 0x000D:  /* <CR>   */
                     case 0x0020:  /* <SP>   */
                     case 0x00A0:  /* <NBSP> */
+                    case 0x1680:
+                    case 0x2000:
+                    case 0x2001:
+                    case 0x2002:
+                    case 0x2003:
+                    case 0x2004:
+                    case 0x2005:
+                    case 0x2006:
+                    case 0x2007:
+                    case 0x2008:
+                    case 0x2009:
+                    case 0x200A:
                     case 0x2028:  /* <LS>   */
                     case 0x2029:  /* <PS>   */
+                    case 0x202F:
+                    case 0x205F:
+                    case 0x3000:
                     case 0xFEFF:  /* <BOM>  */
                         trim++;
                         continue;
index 42123720e5150e473439ac011a16cc1c45f991c2..0c3f0ade3b9bde02baec671477a22b1c225b8562 100644 (file)
@@ -5653,6 +5653,16 @@ static njs_unit_test_t  njs_test[] =
     { nxt_string("'\\u2029abc\\uFEFF\\u2028'.trim()"),
       nxt_string("abc") },
 
+#if (!NXT_HAVE_MEMORY_SANITIZER) /* very long test under MSAN */
+    { nxt_string("var a = [], code;"
+                 "for (code = 0; code <= 1114111; code++) {"
+                 "    var ws = String.fromCodePoint(code);"
+                 "    if ((ws + '-' + ws).trim() === '-')"
+                 "        a.push(code);"
+                 "} a"),
+      nxt_string("9,10,11,12,13,32,160,5760,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8232,8233,8239,8287,12288,65279") },
+#endif
+
     { nxt_string("'abcdefgh'.search()"),
       nxt_string("0") },