Fix GH-12826: Weird pointers issue in nested loops #12831
Closed
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.
This regressed in cd53ce8.
The loop with
zend_hash_iterators_update
hangs forever becauseiter_pos
can't advance toidx
. This is because thezend_hash_iterators_lower_pos
upper bound istarget->nNumUsed
, but that is set tosource->nNumOfElements
.php-src/Zend/zend_hash.c
Lines 2419 to 2422 in e3de478
php-src/Zend/zend_hash.c
Line 2410 in e3de478
That means that if there are holes in the array, we still loop over all the buckets but the number of bucket slots will not match. Fix it by changing the assignment.
I'm not entirely sure this is the whole story though.