Fix IntlPartsIterator key off-by-one error and first key #8172
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.
Closes GH-7734
IntlPartsIterator
withPARTS_ITERATOR_KEY_RIGHT
relies on advancing the iterator onrewind
and setting theindex
to the start of the next character sequence. However, the engine resets theindex
to-1
after rewinding the iterator.php-src/Zend/zend_execute.c
Line 4596 in 51f750e
This does not happen in
iterator_to_array
, however.php-src/ext/spl/spl_iterators.c
Lines 3040 to 3048 in 51f750e
Which is why this wasn't caught in 0eb5c1a.
IntlIterator_ce_ptr->ce_flags |= ZEND_ACC_REUSE_GET_ITERATOR;
will be removed when merging intomaster
since the inheritance mechanism ofget_iterator
is different there and this part was already fixed (see 0eb5c1a).