]> git.kaiwu.me - njs.git/commitdiff
Fixed RegExp.prototype.[@@split]() with UTF8 strings.
authorDmitry Volyntsev <xeioex@nginx.com>
Fri, 11 Jun 2021 15:47:37 +0000 (15:47 +0000)
committerDmitry Volyntsev <xeioex@nginx.com>
Fri, 11 Jun 2021 15:47:37 +0000 (15:47 +0000)
Found by OSS-Fuzz.

src/njs_regexp.c
src/test/njs_unit_test.c

index 838be7a6a40137104d5405adfbed9a7843797dbc..ec29c06e78772cabd704bc6efe738383de1e94bd 100644 (file)
@@ -1828,7 +1828,8 @@ njs_regexp_prototype_symbol_split(njs_vm_t *vm, njs_value_t *args,
     end = &s.start[s.size];
 
     if (utf8 == NJS_STRING_UTF8) {
-        start = njs_string_offset(s.start, s.start + s.size, p);
+        start = (p < length) ? njs_string_offset(s.start, s.start + s.size, p)
+                             : end;
 
     } else {
         start = &s.start[p];
index f26a4bd2df2eb4aca87991bf73dcd8d221265449..0b458aceccc0287cc1bb4eeeb19adac5bb8bcbff 100644 (file)
@@ -8861,6 +8861,9 @@ static njs_unit_test_t  njs_test[] =
     { njs_str("'abc'.split(/abc/)"),
       njs_str(",") },
 
+    { njs_str("('α'.repeat(32)).split(/./).length"),
+      njs_str("33") },
+
     { njs_str("'AbcDefGhi'.split(/([A-Z][a-z]+)/)"),
       njs_str(",Abc,,Def,,Ghi,") },