From af2bd3ae0abd72aa1d493524495447daabeaca73 Mon Sep 17 00:00:00 2001 From: Dmitry Volyntsev Date: Fri, 11 Jun 2021 15:47:37 +0000 Subject: [PATCH] Fixed RegExp.prototype.[@@split]() with UTF8 strings. Found by OSS-Fuzz. --- src/njs_regexp.c | 3 ++- src/test/njs_unit_test.c | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) 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,") }, -- 2.47.3