fix fast-array GC traversal of uninitialised slots #473
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes #471
js_allocate_fast_array()used to setp->u.array.count = lenimmediately after allocation, regardless of the elements being uninitialised. If a GC pass runs during construction in methods that use this function (i.e.js_array_toReversed(),js_array_toSpliced(),js_array_toSorted(),js_array_with()), it could traverse uninitialised bytes and treat them asJSValues, potentially handling attacker-controlled leftover pointers.The patch changes
js_allocate_fast_array()to setp->u.array.count = 0initially, leaving callers that updatep->u.array.u.values[]to also increment this value progressively.