ID: 49723 User updated by: goetas at lignano dot it Reported By: goetas at lignano dot it Status: Open Bug Type: SPL related Operating System: * PHP Version: 5.3.0 New Comment:
source code of LimitIterator, "seek" method at line 63: if ($this->it instanceof SeekableIterator) { $this->it->seek($position); <-- there is no check if i can move pointer to $position like on else branch $this->pos = $position; } else { while($this->pos < $position && $this->it->valid()) { <-- valid() ensures that i can move to $position $this->next(); } } Previous Comments: ------------------------------------------------------------------------ [2009-10-02 18:23:57] goetas at lignano dot it the problem is not resolved with php 5.3.2-dev on my apache2/winxp ------------------------------------------------------------------------ [2009-10-01 16:09:43] j...@php.net Please try using this snapshot: http://snaps.php.net/php5.3-latest.tar.gz For Windows: http://windows.php.net/snapshots/ ------------------------------------------------------------------------ [2009-09-30 13:48:01] goetas at lignano dot it Description: ------------ iterating over an empty seekable iterator causes an unexpected exception. with actual implementation of LimitIterator::rewind() there is no way to do an empty loop over an empty ArrayIterator. i suggest this implementation for LimitIterator::rewind() method function rewind(){ $this->it->rewind(); $this->pos = 0; if($this->it->valid()){ // check for empty iterators $this->seek($this->offset); } } Reproduce code: --------------- $it = new ArrayIterator(array()); $limIt = new LimitIterator($it, 0, 5); foreach ($limIt as $item){ echo $item; } Expected result: ---------------- an empty loop Actual result: -------------- Uncaught exception 'OutOfBoundsException' with message 'Seek position 0 is out of range' ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=49723&edit=1