From: Dmitry Volyntsev Date: Sat, 7 May 2022 01:55:07 +0000 (-0700) Subject: Fixed Object.defineProperty() when a recursive descriptor is provided. X-Git-Tag: 0.7.4~13 X-Git-Url: http://www.kaiwu.me/postgresql/commit/static/gitweb.js?a=commitdiff_plain;h=81af26364c21c196dd21fb5e14c7fa9ce7debd17;p=njs.git Fixed Object.defineProperty() when a recursive descriptor is provided. This closes #481 issue on Github. --- diff --git a/src/njs_array.c b/src/njs_array.c index ec3a5da9..2367420d 100644 --- a/src/njs_array.c +++ b/src/njs_array.c @@ -142,6 +142,10 @@ njs_array_convert_to_slow_array(njs_vm_t *vm, njs_array_t *array) njs_value_t index, value; njs_object_prop_t *prop; + if (njs_slow_path(!array->object.fast_array)) { + return NJS_OK; + } + njs_set_array(&value, array); array->object.fast_array = 0; diff --git a/src/test/njs_unit_test.c b/src/test/njs_unit_test.c index 87d8d46c..77ec044e 100644 --- a/src/test/njs_unit_test.c +++ b/src/test/njs_unit_test.c @@ -13837,6 +13837,16 @@ static njs_unit_test_t njs_test[] = "d.enumerable && d.writable && d.configurable"), njs_str("true") }, + { njs_str("const arr = [1,2];" + "function f(arg) {" + " const desc = {get: arg};" + " Object.defineProperty(desc, 'set', desc);" + " Object.defineProperty(arr, 1, desc);" + "}" + "f(f);" + "njs.dump(arr)"), + njs_str("[1,'[Getter]']") }, + { njs_str("Object.defineProperties()"), njs_str("TypeError: Object.defineProperties is called on non-object") },