details: https://hg.nginx.org/njs/rev/293fe42c5e1c branches: changeset: 2056:293fe42c5e1c user: Dmitry Volyntsev <xei...@nginx.com> date: Mon Feb 27 22:14:36 2023 -0800 description: 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. diffstat: src/njs_json.c | 13 +++++++------ src/test/njs_unit_test.c | 5 +++++ 2 files changed, 12 insertions(+), 6 deletions(-) diffs (45 lines): diff -r a79b6a75cfab -r 293fe42c5e1c src/njs_json.c --- a/src/njs_json.c Mon Feb 27 22:14:36 2023 -0800 +++ b/src/njs_json.c Mon Feb 27 22:14:36 2023 -0800 @@ -1771,6 +1771,13 @@ njs_dump_terminal(njs_json_stringify_t * 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 * 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 -r a79b6a75cfab -r 293fe42c5e1c src/test/njs_unit_test.c --- a/src/test/njs_unit_test.c Mon Feb 27 22:14:36 2023 -0800 +++ b/src/test/njs_unit_test.c Mon Feb 27 22:14:36 2023 -0800 @@ -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), _______________________________________________ nginx-devel mailing list nginx-devel@nginx.org https://mailman.nginx.org/mailman/listinfo/nginx-devel