Skip to content

Commit 81af263

Browse files
committed
Fixed Object.defineProperty() when a recursive descriptor is provided.
This closes #481 issue on Github.
1 parent 99239ae commit 81af263

File tree

2 files changed

+14
-0
lines changed

2 files changed

+14
-0
lines changed

Diff for: src/njs_array.c

+4
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,10 @@ njs_array_convert_to_slow_array(njs_vm_t *vm, njs_array_t *array)
142142
njs_value_t index, value;
143143
njs_object_prop_t *prop;
144144

145+
if (njs_slow_path(!array->object.fast_array)) {
146+
return NJS_OK;
147+
}
148+
145149
njs_set_array(&value, array);
146150
array->object.fast_array = 0;
147151

Diff for: src/test/njs_unit_test.c

+10
Original file line numberDiff line numberDiff line change
@@ -13837,6 +13837,16 @@ static njs_unit_test_t njs_test[] =
1383713837
"d.enumerable && d.writable && d.configurable"),
1383813838
njs_str("true") },
1383913839

13840+
{ njs_str("const arr = [1,2];"
13841+
"function f(arg) {"
13842+
" const desc = {get: arg};"
13843+
" Object.defineProperty(desc, 'set', desc);"
13844+
" Object.defineProperty(arr, 1, desc);"
13845+
"}"
13846+
"f(f);"
13847+
"njs.dump(arr)"),
13848+
njs_str("[1,'[Getter]']") },
13849+
1384013850
{ njs_str("Object.defineProperties()"),
1384113851
njs_str("TypeError: Object.defineProperties is called on non-object") },
1384213852

0 commit comments

Comments
 (0)