From: Dmitry Volyntsev Date: Fri, 11 Jun 2021 15:47:37 +0000 (+0000) Subject: Fixed RegExp.prototype.[@@split]() with UTF8 strings. X-Git-Tag: 0.6.0~3 X-Git-Url: http://www.kaiwu.me/postgresql/commit/?a=commitdiff_plain;h=af2bd3ae0abd72aa1d493524495447daabeaca73;p=njs.git Fixed RegExp.prototype.[@@split]() with UTF8 strings. Found by OSS-Fuzz. --- diff --git a/src/njs_regexp.c b/src/njs_regexp.c index 838be7a6..ec29c06e 100644 --- a/src/njs_regexp.c +++ b/src/njs_regexp.c @@ -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]; diff --git a/src/test/njs_unit_test.c b/src/test/njs_unit_test.c index f26a4bd2..0b458ace 100644 --- a/src/test/njs_unit_test.c +++ b/src/test/njs_unit_test.c @@ -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,") },