Skip to content

Fix IntlPartsIterator key off-by-one error and first key#8172

Closed
iluuu1994 wants to merge 1 commit intophp:PHP-8.1from
iluuu1994:gh-7734
Closed

Fix IntlPartsIterator key off-by-one error and first key#8172
iluuu1994 wants to merge 1 commit intophp:PHP-8.1from
iluuu1994:gh-7734

Conversation

@iluuu1994
Copy link
Member

@iluuu1994 iluuu1994 commented Mar 4, 2022

Closes GH-7734

IntlPartsIterator with PARTS_ITERATOR_KEY_RIGHT relies on advancing the iterator on rewind and setting the index to the start of the next character sequence. However, the engine resets the index to -1 after rewinding the iterator.

iter->index = -1; /* will be set to 0 before using next handler */

This does not happen in iterator_to_array, however.

iter->index = 0;
if (iter->funcs->rewind) {
iter->funcs->rewind(iter);
if (EG(exception)) {
goto done;
}
}
while (iter->funcs->valid(iter) == SUCCESS) {

Which is why this wasn't caught in 0eb5c1a.

IntlIterator_ce_ptr->ce_flags |= ZEND_ACC_REUSE_GET_ITERATOR; will be removed when merging into master since the inheritance mechanism of get_iterator is different there and this part was already fixed (see 0eb5c1a).

@iluuu1994 iluuu1994 changed the title Fix IntlPartsIterator key off-by-one error Fix IntlPartsIterator key off-by-one error and first key Mar 4, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant