The implementation you are looking at (defined in the php files) is an outdated illustration to show how the iterator is implemented, check out:
spl_limit_it_seek() inside php-src/ext/spl/spl_iterators.c for the actual implementation.
As for whether this is a bug or not, sounds expected behaviour to me that when trying to loop over an empty range it would cause an OutOfRangeException, rather check the iterator size before trying to loop.

[2009-10-06 15:34 UTC] goetas at lignano dot it

i think this can be a bug... or not correcty explained feature,
becasue following code works fine:
$it = new EmptyIterator(); // EmptyIterator instead of ArrayIterator
$limIt = new LimitIterator($it, 0, 5);
foreach ($limIt as $item){
echo $item;
}
both range are empty, but EmptyIterator does not implements SeekableIterator while ArrayIterator it does.
exception is thrown only if iterator implements SeekableIterator and is empty.

This bug has been fixed in SVN.
Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
http://snaps.php.net/.
Thank you for the report, and for helping us make PHP better.
Fixed by removing unnecessary seeks