From: Fabrice Bellard Date: Sat, 7 Nov 2026 11:07:51 +0000 (+0100) Subject: added missing extensibility test for generic arrays in JS_CreateProperty() (#593) X-Git-Url: https://git.kaiwu.me/?a=commitdiff_plain;h=af2e2827a800690bb7e16eaaaed4dab524dff138;p=quickjs.git added missing extensibility test for generic arrays in JS_CreateProperty() (#593) --- diff --git a/quickjs.c b/quickjs.c index b328873..ccd86d4 100644 --- a/quickjs.c +++ b/quickjs.c @@ -10389,6 +10389,8 @@ static int JS_CreateProperty(JSContext *ctx, JSObject *p, JSShapeProperty *pslen; generic_array: /* update the length field */ + if (!p->extensible) + goto not_extensible; plen = &p->prop[0]; JS_ToUint32(ctx, &len, plen->u.value); if ((idx + 1) > len) { diff --git a/tests/test_builtin.js b/tests/test_builtin.js index 808801a..d0e1691 100644 --- a/tests/test_builtin.js +++ b/tests/test_builtin.js @@ -242,6 +242,31 @@ function test_array() a[10] = 2; assert(a.length, 11); assert(a.toString(), ",,,,,,,,,,2"); + + test_array_extension(); +} + +function test_array_extension() +{ + "use strict"; + var a, c, s, o; + /* array prevent extension */ + var b = [1, , 3]; // a hole: not a fast array + Object.preventExtensions(b); + assert_throws(TypeError, () => b[3] = 9); + assert(b.length, 3); + + var c = [1, , 3]; Object.preventExtensions(c); + assert_throws(TypeError, () => c.push(9)); + assert(c.length, 3); + + var s = [1, , 3]; Object.seal(s); + assert_throws(TypeError, () => s[5] = 1); + assert(s.length, 3); + + var o = [1, , 3]; Object.preventExtensions(o); + assert(Reflect.defineProperty(o, 7, { value: 1 }), false); + assert(o.length, 3); } function test_string()