]> git.kaiwu.me - njs.git/commitdiff
Fixed Function constructor handling when called without arguments.
authorVadim Zhestikov <v.zhestikov@f5.com>
Tue, 2 Jul 2024 21:55:03 +0000 (14:55 -0700)
committerDmitry Volyntsev <xeioexception@gmail.com>
Sat, 6 Jul 2024 01:27:09 +0000 (18:27 -0700)
Corrected the behavior of Function.constructor() when invoked without arguments
relative to an object.

src/njs_function.c
src/test/njs_unit_test.c

index bfdf3f3555ae191b0867fc7a9c0615b680d4fe74..c677be573603b76b4a564cd26645d51daeaeb27e 100644 (file)
@@ -1054,9 +1054,11 @@ njs_function_constructor(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs,
 
     njs_chb_append_literal(&chain, "){");
 
-    ret = njs_value_to_chain(vm, &chain, njs_argument(args, nargs - 1));
-    if (njs_slow_path(ret < NJS_OK)) {
-        return ret;
+    if (nargs > 1) {
+        ret = njs_value_to_chain(vm, &chain, njs_argument(args, nargs - 1));
+        if (njs_slow_path(ret < NJS_OK)) {
+            return ret;
+        }
     }
 
     njs_chb_append_literal(&chain, "})");
index 530cf6ff8f9daa3cb8e5e0035d21a83a911e4f56..2f0e318c471c0aa4da332d2c42c9d1cb14b6697e 100644 (file)
@@ -14147,6 +14147,9 @@ static njs_unit_test_t  njs_test[] =
     { njs_str("Function.constructor === Function"),
       njs_str("true") },
 
+    { njs_str("Function.constructor()"),
+      njs_str("[object Function]") },
+
     { njs_str("function f() {} f.__proto__ === Function.prototype"),
       njs_str("true") },