]> git.kaiwu.me - njs.git/commitdiff
Fixed String.prototype.replace() for byte strings with regex arg.
authorAlexander Borisov <alexander.borisov@nginx.com>
Tue, 16 Jul 2019 14:32:10 +0000 (17:32 +0300)
committerAlexander Borisov <alexander.borisov@nginx.com>
Tue, 16 Jul 2019 14:32:10 +0000 (17:32 +0300)
njs/njs_string.c
njs/test/njs_unit_test.c

index df0502da4815344074d497740c8e73acac26d45c..c6190d0b83ce2dbee951c2b831f18b4c04b6f75d 100644 (file)
@@ -3160,7 +3160,8 @@ njs_string_replace_regexp(njs_vm_t *vm, njs_value_t *args,
             start = r->part[0].start;
 
             if (start < end) {
-                p = (u_char *) nxt_utf8_next(start, end);
+                p = (r->utf8 != NJS_STRING_BYTE)
+                    ? (u_char *) nxt_utf8_next(start, end) : start + 1;
 
                 r->part[1].start = start;
                 r->part[1].size = p - start;
index 27fe9e21426fcf3b0302108019e660af9ec493d3..c0ec3804cd45285d443dac03b129944de52022a2 100644 (file)
@@ -5681,6 +5681,9 @@ static njs_unit_test_t  njs_test[] =
     { nxt_string("typeof '0'.replace(/^/g, '$0')"),
       nxt_string("string") },
 
+    { nxt_string("typeof String.bytesFrom(Array(15).fill(0xE3)).replace(/^/g, 1)"),
+      nxt_string("string") },
+
     { nxt_string("/]/"),
       nxt_string("/\\]/") },