From: Dmitry Volyntsev Date: Fri, 6 Oct 2023 23:49:59 +0000 (-0700) Subject: Fixed RegExp.prototype.split(). X-Git-Tag: 0.8.2~8 X-Git-Url: http://www.kaiwu.me/postgresql/commit/?a=commitdiff_plain;h=f114d3b21d1b3dd7f937e4c833e68c5374c509a7;p=njs.git Fixed RegExp.prototype.split(). The issue was introduced in c0aad58cfadb. --- diff --git a/src/njs_regexp.c b/src/njs_regexp.c index b6c86dba..839fc8de 100644 --- a/src/njs_regexp.c +++ b/src/njs_regexp.c @@ -1625,7 +1625,7 @@ njs_regexp_prototype_symbol_split(njs_vm_t *vm, njs_value_t *args, njs_value_t r, z, this, s_lvalue, setval, constructor; njs_object_t *object; const u_char *start, *end; - njs_string_prop_t s; + njs_string_prop_t s, sv; njs_value_t arguments[2]; static const njs_value_t string_lindex = njs_string("lastIndex"); @@ -1815,14 +1815,17 @@ njs_regexp_prototype_symbol_split(njs_vm_t *vm, njs_value_t *args, ncaptures = njs_max(ncaptures - 1, 0); for (i = 1; i <= ncaptures; i++) { - value = njs_array_push(vm, array); - if (njs_slow_path(value == NULL)) { + ret = njs_value_property_i64(vm, &z, i, retval); + if (njs_slow_path(ret == NJS_ERROR)) { return NJS_ERROR; } - ret = njs_value_property_i64(vm, &z, i, value); - if (njs_slow_path(ret == NJS_ERROR)) { - return NJS_ERROR; + (void) njs_string_prop(&sv, retval); + + ret = njs_array_string_add(vm, array, sv.start, sv.size, + sv.length); + if (njs_slow_path(ret != NJS_OK)) { + return ret; } if (array->length == limit) { diff --git a/src/test/njs_unit_test.c b/src/test/njs_unit_test.c index 18541204..fbe9043e 100644 --- a/src/test/njs_unit_test.c +++ b/src/test/njs_unit_test.c @@ -9734,6 +9734,9 @@ static njs_unit_test_t njs_test[] = { njs_str("'мояВерблюжьяСтрока'.split(/(?=[А-Я])/)"), njs_str("моя,Верблюжья,Строка") }, + { njs_str("`aaaaaaaaaaaaaaaaa`.split(/(.*)/)"), + njs_str(",aaaaaaaaaaaaaaaaa,") }, + { njs_str("'Harry Trump ;Fred Barney; Helen Rigby ; Bill Abel ;Chris Hand '.split( /\\s*(?:;|$)\\s*/)"), njs_str("Harry Trump,Fred Barney,Helen Rigby,Bill Abel,Chris Hand,") },