Repository navigation
Conversation
Clay__WarningArray_Allocate_Arena used sizeof(Clay_String) while the array stores Clay__Warning (two Clay_String fields). With capacity 100 that reserved only 50 slots but range checks still used capacity 100, so Clay__WarningArray_Add could write past the arena slab. Fixes nicbarker#638.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Summary
Fixes #638.
Clay__WarningArray_Allocate_Arenareservedcapacity * sizeof(Clay_String)bytes while the array storesClay__Warning(twoClay_Stringfields). With the usual capacity of 100 that only fits 50 warnings, butClay__WarningArray_Addstill range-checks against capacity 100, so an Add past slot 49 would write past the arena slab.The reporter noted
Addis currently unused in-tree; this still corrects the allocator so capacity and storage agree if warnings are ever recorded again.Change: size the slab with
sizeof(Clay__Warning).Test plan
Host harness (not committed) that calls
Clay__WarningArray_Allocate_Arena(100, …)and measures the arena advance after alignment:totalSizeBytes=1600(100 * sizeof(Clay_String)),real_slots_fitting=50, claimed capacity 100 → failtotalSizeBytes=3200(100 * sizeof(Clay__Warning)),real_slots_fitting=100→ passNo CONTRIBUTING / AGENTS / PR template requirements found; no AI disclosure requested by the project.