Resize ary when Array#sort! block modifies embedded ary #10522
Merged
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.
(note: It was decided we should handle this in the public issue tracker in security ticket #2327648)
In cases where
rb_ary_sort_bangis called with a block andtmpis an embedded array, we need to account for the block potentially impacting the capacity ofary.Reproduction script for x86 targets:
Reproduction script for ARM targets:
The above example can put the array into a corrupted state (
aryafter block haslen=0andcapa=14) :This results in a heap buffer overflow and possible segfault:
Was able to reproduce on the following builds:
Could not reproduce on the following builds:
This commit adds a conditional to determine when the capacity of
aryhas been modified by the provided block. If this is the case, ensure that the capacity ofaryis adjusted to handle at minimum the len oftmp.test-allpasses locally: