details:   https://hg.nginx.org/njs/rev/2bae88c33583
branches:  
changeset: 1515:2bae88c33583
user:      Dmitry Volyntsev <[email protected]>
date:      Thu Sep 03 13:30:15 2020 +0000
description:
Fixed RegExp.prototype[Symbol.replace] when replace val is function.

Previously, a custom function received garbage value as the first
argument.

diffstat:

 src/njs_regexp.c         |  1 +
 src/test/njs_unit_test.c |  4 ++++
 2 files changed, 5 insertions(+), 0 deletions(-)

diffs (25 lines):

diff -r e03701b6e8aa -r 2bae88c33583 src/njs_regexp.c
--- a/src/njs_regexp.c  Tue Sep 01 17:25:33 2020 +0000
+++ b/src/njs_regexp.c  Thu Sep 03 13:30:15 2020 +0000
@@ -1347,6 +1347,7 @@ njs_regexp_prototype_symbol_replace(njs_
             array = njs_array(r);
 
             arguments = array->start;
+            arguments[0] = matched;
             ncaptures = array->length;
 
             for (n = 1; n < ncaptures; n++) {
diff -r e03701b6e8aa -r 2bae88c33583 src/test/njs_unit_test.c
--- a/src/test/njs_unit_test.c  Tue Sep 01 17:25:33 2020 +0000
+++ b/src/test/njs_unit_test.c  Thu Sep 03 13:30:15 2020 +0000
@@ -8307,6 +8307,10 @@ static njs_unit_test_t  njs_test[] =
     { njs_str("RegExp.prototype[Symbol.replace].call(/b/, 'abc','B')"),
       njs_str("aBc") },
 
+    { njs_str("var m; var r = /./; r.exec = function() { return []; };"
+              "r[Symbol.replace]('foo', function() {m = arguments[0]}); [m, 
typeof m]"),
+      njs_str("undefined,string") },
+
     { njs_str("String.bytesFrom([253,242,141,10]).replace(/\\s/g, 'X')[3]"),
       njs_str("X") },
 
_______________________________________________
nginx-devel mailing list
[email protected]
http://mailman.nginx.org/mailman/listinfo/nginx-devel

Reply via email to