From 77e5e03d361f11161444d0f77221ba0928e69350 Mon Sep 17 00:00:00 2001 From: Dmitry Volyntsev Date: Mon, 27 Feb 2023 22:14:36 -0800 Subject: [PATCH] Fixed a func instance dumping with "name" as getter. After njs_value_property() call the value argument might be overwritten. This is similar to #615. --- src/njs_json.c | 13 +++++++------ src/test/njs_unit_test.c | 5 +++++ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/njs_json.c b/src/njs_json.c index 6a37f76d..e71afdf1 100644 --- a/src/njs_json.c +++ b/src/njs_json.c @@ -1771,6 +1771,13 @@ njs_dump_terminal(njs_json_stringify_t *stringify, njs_chb_t *chain, break; case NJS_FUNCTION: + if (njs_function(value)->native) { + str = njs_str_value("native"); + + } else { + str = njs_str_value(""); + } + ret = njs_value_property(stringify->vm, value, njs_value_arg(&name_string), &tag); if (njs_slow_path(ret == NJS_ERROR)) { @@ -1779,12 +1786,6 @@ njs_dump_terminal(njs_json_stringify_t *stringify, njs_chb_t *chain, if (njs_is_string(&tag)) { njs_string_get(&tag, &str); - - } else if (njs_function(value)->native) { - str = njs_str_value("native"); - - } else { - str = njs_str_value(""); } if (str.length != 0) { diff --git a/src/test/njs_unit_test.c b/src/test/njs_unit_test.c index 4e537917..46a0ea88 100644 --- a/src/test/njs_unit_test.c +++ b/src/test/njs_unit_test.c @@ -22865,6 +22865,11 @@ static njs_unit_test_t njs_shell_test[] = "e" ENTER), njs_str("Error: foo") }, + { njs_str("function f() {};" ENTER + "Object.defineProperty(f, 'name', { get() {void(0)} })" ENTER + "f" ENTER), + njs_str("[Function]") }, + /* Temporary indexes */ { njs_str("var a = [1,2,3], i; for (i in a) {Object.seal({});}" ENTER), -- 2.47.3