Welcome! Log In Create A New Profile

Advanced

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

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

The issue was introduced in cf85d0f8640a.

diffstat:

src/njs_regexp.c | 13 +++++++++----
1 files changed, 9 insertions(+), 4 deletions(-)

diffs (30 lines):

diff -r c16f64d334f2 -r b67fc7398a83 src/njs_regexp.c
--- a/src/njs_regexp.c Fri Oct 06 16:49:59 2023 -0700
+++ b/src/njs_regexp.c Fri Oct 06 16:51:53 2023 -0700
@@ -1541,10 +1541,6 @@ njs_regexp_prototype_symbol_replace(njs_
arguments, ncaptures, &groups,
replace, retval);

- if (njs_object_slots(r)) {
- njs_regexp_exec_result_free(vm, njs_array(r));
- }
-
} else {
ret = njs_array_expand(vm, array, 0,
njs_is_defined(&groups) ? 3 : 2);
@@ -1586,6 +1582,15 @@ njs_regexp_prototype_symbol_replace(njs_

next_pos = pos + (int64_t) m.length;
}
+
+ if (!func_replace && njs_object_slots(r)) {
+ /*
+ * Doing free here ONLY for non-function replace, because
+ * otherwise we cannot be certain the result of match
+ * was not stored elsewhere.
+ */
+ njs_regexp_exec_result_free(vm, njs_array(r));
+ }
}

if (next_pos < (int64_t) s.size) {
_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
https://mailman.nginx.org/mailman/listinfo/nginx-devel
Subject Author Views Posted

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

Dmitry Volyntsev 266 October 07, 2023 01:50AM



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

Online Users

Guests: 329
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 500 on July 15, 2024
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready