]> git.kaiwu.me - njs.git/commitdiff
Fixed String.prototype.toUTF8() function.
authorIgor Sysoev <igor@sysoev.ru>
Wed, 28 Feb 2018 13:20:11 +0000 (16:20 +0300)
committerIgor Sysoev <igor@sysoev.ru>
Wed, 28 Feb 2018 13:20:11 +0000 (16:20 +0300)
A byte string returned by String.prototype.toUTF8() had length equal
to its size so the string can be processed later as an ASCII string.

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

index b1690ac5f769cba7c6fd287c2d35b90d40788937..544a3548e6d4bba509873075091263a16ce4b11f 100644 (file)
@@ -1051,6 +1051,11 @@ njs_string_slice(njs_vm_t *vm, njs_value_t *dst,
         start += slice->start;
         size = slice->length;
 
+        if (string->length == 0) {
+            /* Byte string. */
+            length = 0;
+        }
+
     } else {
         /* UTF-8 string. */
         end = start + string->size;
index eecb57d89ae24135c05967e8b3663a6a801b89ef..1fd0f9e14bcf09fedb7cfa4a382090e7c0966939 100644 (file)
@@ -3529,6 +3529,15 @@ static njs_unit_test_t  njs_test[] =
     { nxt_string("'α'.toUTF8()[0]"),
       nxt_string("\xCE") },
 
+    { nxt_string("/^\\x80$/.test('\\x80'.toBytes())"),
+      nxt_string("true") },
+
+    { nxt_string("/^\\xC2\\x80$/.test('\\x80'.toUTF8())"),
+      nxt_string("true") },
+
+    { nxt_string("'α'.toUTF8().toBytes()"),
+      nxt_string("α") },
+
     { nxt_string("var a = 'a'.toBytes() + 'α'; a + a.length"),
       nxt_string("aα3") },