You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
A named property assigned to an array is silently dropped #9201
Assigning a named (non-index) property to an array is silently dropped: the write appears to succeed, the read returns undefined, and the key never shows up in Object.keys.
Index writes are fine — arr[10] sets, reads back, extends length to 11, and JSON.stringify produces the identical sparse-with-null form node does. It is specifically the named key that vanishes. No error is raised, in strict mode or otherwise, which is what makes it costly: the failure is silent and the array otherwise behaves normally.
This pattern is common in real code — attaching metadata to an array (results.total, rows.hasMore), and several npm packages return arrays with named fields alongside the elements.
Confirmed pre-existing on main, not caused by #9190, by reverting that PR's four runtime files to main and rebuilding the runtime and stdlib static wrappers: output byte-identical to the PR build, and both differ from node in exactly these two lines. Found while auditing #9190.
Everything else in the same probe matches node byte-for-byte: 300+ named keys on a plain object, numeric-vs-string key aliasing (o[5] / o["5"]), negative and fractional keys, non-enumerable and accessor properties, symbol keys, getOwnPropertyNames, prototype shadowing with for…in order, Object.freeze, and a 400-key index-like receiver.
Closing: the owner-transfer fix landed in #9434 (array growth rekeys the expando table to the new allocation); #9579 (merge train #9581, 2026-09-03) pins it with a runtime regression and a node differential for typed and dynamic arrays, enumeration and JSON.
Activity
test(runtime): pin array expandos across growth (#9201)
proggeramlug commentedon Sep 3, 2026
Closing: the owner-transfer fix landed in #9434 (array growth rekeys the expando table to the new allocation); #9579 (merge train #9581, 2026-09-03) pins it with a runtime regression and a node differential for typed and dynamic arrays, enumeration and JSON.