Welcome! Log In Create A New Profile

Advanced

[njs] Fixed RegExp.prototype.split().

Dmitry Volyntsev
October 07, 2023 01:50AM
details: https://hg.nginx.org/njs/rev/c16f64d334f2
branches:
changeset: 2217:c16f64d334f2
user: Dmitry Volyntsev <xeioex@nginx.com>
date: Fri Oct 06 16:49:59 2023 -0700
description:
Fixed RegExp.prototype.split().

The issue was introduced in c0aad58cfadb.

diffstat:

src/njs_regexp.c | 15 +++++++++------
src/test/njs_unit_test.c | 3 +++
2 files changed, 12 insertions(+), 6 deletions(-)

diffs (48 lines):

diff -r 632002c161b1 -r c16f64d334f2 src/njs_regexp.c
--- a/src/njs_regexp.c Wed Oct 04 15:00:02 2023 -0700
+++ b/src/njs_regexp.c Fri Oct 06 16:49:59 2023 -0700
@@ -1625,7 +1625,7 @@ njs_regexp_prototype_symbol_split(njs_vm
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
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 -r 632002c161b1 -r c16f64d334f2 src/test/njs_unit_test.c
--- a/src/test/njs_unit_test.c Wed Oct 04 15:00:02 2023 -0700
+++ b/src/test/njs_unit_test.c Fri Oct 06 16:49:59 2023 -0700
@@ -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,") },

_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
https://mailman.nginx.org/mailman/listinfo/nginx-devel
Subject Author Views Posted

[njs] Fixed RegExp.prototype.split().

Dmitry Volyntsev 251 October 07, 2023 01:50AM



Sorry, you do not have permission to post/reply in this forum.

Online Users

Guests: 286
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready