#297 Bugfix - SparseJaggedArray Overflow defense. #300
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.
Fix: Memory Corruption Bug in SparseJaggedArray Capacity Overflow #297
Problem
The Arch ECS library experienced
System.AccessViolationExceptioncrashes during high-load operations involving archetype transitions with 10,000+ entities. The crash occurred inSparseJaggedArray.get_Capacity()during component addition operations.Root Cause
The issue was in the archetype edge management code (
Archetype.Edges.cs). When component IDs exceeded the initialSparseJaggedArraycapacity ofBucketSize = 16, calls to:HasAddEdge(componentId)→ContainsKey(componentId)→get_Capacity()HasRemoveEdge(componentId)→ContainsKey(componentId)→get_Capacity()Would access memory beyond the allocated bounds, causing memory corruption and process crashes.
Stack Trace
Solution
Code Changes
File:
src/Arch/Core/Edges/Archetype.Edges.csIncreased Initial Capacity
Added Bounds Checking to Prevent Memory Access Violations
File:
src/Arch.Tests/Utils/Structs.cs(Added)File:
src/Arch.Tests/SparseJaggedArrayBugTest.cs(New File)Added comprehensive test suite including:
Testing
Test Execution Results
Test Coverage
int.MaxValueImpact
Positive Impact
System.AccessViolationExceptionPerformance Impact
Risk Assessment
Validation
Manual Testing Steps
Before Fix
After Fix
Conclusion
The solution follows fail safely - returning appropriate default values for out-of-bounds component IDs rather than allowing memory corruption to crash the application.