[njs] Fixed constructor property of an iterator object.

noreply at nginx.com noreply at nginx.com
Tue Jul 2 02:34:02 UTC 2024


details:   https://github.com/nginx/njs/commit/7f55a51f23113e3fc8a57d2598f3b87101098bb2
branches:  master
commit:    7f55a51f23113e3fc8a57d2598f3b87101098bb2
user:      Dmitry Volyntsev <xeioex at nginx.com>
date:      Wed, 26 Jun 2024 18:50:43 -0700
description:
Fixed constructor property of an iterator object.

This fixes #737 issue on Github.

---
 src/njs_object.c         | 4 ++++
 src/test/njs_unit_test.c | 3 +++
 2 files changed, 7 insertions(+)

diff --git a/src/njs_object.c b/src/njs_object.c
index 5a5970c9..f2aa46a3 100644
--- a/src/njs_object.c
+++ b/src/njs_object.c
@@ -2168,6 +2168,10 @@ njs_object_prototype_create_constructor(njs_vm_t *vm, njs_object_prop_t *prop,
 
 found:
 
+    if (njs_flathsh_is_empty(&vm->constructors[index].object.shared_hash)) {
+        index = NJS_OBJ_TYPE_OBJECT;
+    }
+
     njs_set_function(&constructor, &njs_vm_ctor(vm, index));
     setval = &constructor;
 
diff --git a/src/test/njs_unit_test.c b/src/test/njs_unit_test.c
index 96c922bc..530cf6ff 100644
--- a/src/test/njs_unit_test.c
+++ b/src/test/njs_unit_test.c
@@ -7450,6 +7450,9 @@ static njs_unit_test_t  njs_test[] =
               "[i.next(), i.next(), i.next(), i.next()].map((x) => x.value)"),
       njs_str("1,2,3,") },
 
+    { njs_str("[].values().constructor()"),
+      njs_str("[object Object]") },
+
     { njs_str("var a = [], i = a.values();"
               "a.push(1); a.push(2); a.push(3);"
               "[i.next(), i.next(), i.next(), i.next()].map((x) => x.value)"),


More information about the nginx-devel mailing list