Repository navigation
Regression: ParentIterator/AppendIterator/CallbackFilterIterator — rewind() throws LogicException (ext/spl/spl_iterators.c) #13211
Copy link
Copy link
Closed
Labels
area:vmVirtual machineVirtual machineenhancementNew feature or requestNew feature or requestimplementation-readySpec complete: repro, php-src ref, done-when — safe for workers to claimSpec complete: repro, php-src ref, done-when — safe for workers to claimphase-4:stdlibPhase 4 – stdlib for web appsPhase 4 – stdlib for web appsstdlib
Description
Category
stdlib · php-src-strict
Problem
Several IteratorIterator subclasses beyond InfiniteIterator/NoRewindIterator (#13170) throw LogicException: Iterator wrapper state missing on rewind() instead of delegating to the inner iterator (or cleanly reporting invalid on empty iterators).
| Class / scenario | Zend 8.2 | VM (today) |
|---|---|---|
ParentIterator on RecursiveArrayIterator |
rewind() → valid |
LogicException ❌ |
AppendIterator (empty, no attached iterators) |
rewind() → valid() false |
LogicException ❌ |
CallbackFilterIterator on empty ArrayIterator |
rewind() → valid() false |
LogicException ❌ |
Same missing inner-iterator attachment pattern as #13123 / #13170.
php-src reference
- php/php-src
ext/spl/spl_iterators.c—ParentIterator,AppendIterator,CallbackFilterIterator - php/php-src
ext/spl/spl_iterators.stub.php
PHP implementation target
ext/spl/iterator wrapper builtins — wire inner iterator state on construct/rewind- PHP-in-PHP first — shared wrapper helper in PHP; thin VM dispatch only
Repro (verified 2026-06-28)
./script/docker-exec.sh -- bash -lc 'php test/repro/maintainer_gap_parentiterator_rewind.php'
./script/docker-exec.sh -- bash -lc 'php bin/vm.php test/repro/maintainer_gap_parentiterator_rewind.php'
# LogicException: Iterator wrapper state missing
./script/docker-exec.sh -- bash -lc 'php test/repro/maintainer_gap_appenditerator_empty_rewind.php'
./script/docker-exec.sh -- bash -lc 'php bin/vm.php test/repro/maintainer_gap_appenditerator_empty_rewind.php'
./script/docker-exec.sh -- bash -lc 'php test/repro/maintainer_gap_callbackfilteriterator_empty_rewind.php'
./script/docker-exec.sh -- bash -lc 'php bin/vm.php test/repro/maintainer_gap_callbackfilteriterator_empty_rewind.php'Done when (php-src-strict)
- All three repros print
okon VM - Compliance guards under
test/compliance/cases/stdlib/spl_*iterator_rewind*.phpt - Shared fix documented alongside Regression: IteratorIterator wrappers — InfiniteIterator/NoRewindIterator throw LogicException (ext/spl/spl_iterators.c) #13170 (may land in one PR if same root cause)
Verification
./script/docker-exec.sh -- bash -lc 'php bin/vm.php test/repro/maintainer_gap_parentiterator_rewind.php'
./script/docker-exec.sh -- bash -lc 'php bin/vm.php test/repro/maintainer_gap_appenditerator_empty_rewind.php'
./script/docker-exec.sh -- bash -lc 'php bin/vm.php test/repro/maintainer_gap_callbackfilteriterator_empty_rewind.php'Links
- Related: Regression: IteratorIterator wrappers — InfiniteIterator/NoRewindIterator throw LogicException (ext/spl/spl_iterators.c) #13170, Regression: MultipleIterator/AppendIterator — class stubs without attachIterator()/append() (ext/spl/spl_iterators.c) #13173, Stdlib: SPL iterator wrappers — FilterIterator, LimitIterator, AppendIterator, … (ext/spl parity) #4546, Stdlib: CallbackFilterIterator / RecursiveCallbackFilterIterator — SPL filter iterators missing (ext/spl/spl_iterators.c) #6692
- Self-host: Epic: Self-host critical path — compiler compiles itself (M3→M5) #1492
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
area:vmVirtual machineVirtual machineenhancementNew feature or requestNew feature or requestimplementation-readySpec complete: repro, php-src ref, done-when — safe for workers to claimSpec complete: repro, php-src ref, done-when — safe for workers to claimphase-4:stdlibPhase 4 – stdlib for web appsPhase 4 – stdlib for web appsstdlib
Activity
PurHur commentedon Jun 28, 2026
claim: worker-lane-C — batch (issues #12588, #12598, #13135, #13211)
Fix ParentIterator/AppendIterator/CallbackFilterIterator rewind (#13211…
Fix ParentIterator/AppendIterator/CallbackFilterIterator rewind (#13211…
Fix ParentIterator/AppendIterator/CallbackFilterIterator rewind (#13211…
PurHur commentedon Jun 28, 2026
Merged via #13225 — CallbackFilterIterator, ParentIterator, AppendIterator builtins registered; all three repro scripts print ok.
PurHur commentedon Jun 28, 2026
claim released: worker-lane-C — batch complete