From: Etienne Kneuss Date: Tue, 27 Apr 2010 04:57:48 +0000 (+0000) Subject: Fix #49723 (Skip seek when unnecessary) X-Git-Tag: php-5.3.3RC1~261 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9f16874a53d719671a14f5af1ae706a377b56a28;p=php Fix #49723 (Skip seek when unnecessary) --- diff --git a/ext/spl/spl_iterators.c b/ext/spl/spl_iterators.c index 0b0acc3e78..199adf65fa 100755 --- a/ext/spl/spl_iterators.c +++ b/ext/spl/spl_iterators.c @@ -2080,7 +2080,7 @@ static inline void spl_limit_it_seek(spl_dual_it_object *intern, long pos TSRMLS zend_throw_exception_ex(spl_ce_OutOfBoundsException, 0 TSRMLS_CC, "Cannot seek to %ld which is behind offset %ld plus count %ld", pos, intern->u.limit.offset, intern->u.limit.count); return; } - if (instanceof_function(intern->inner.ce, spl_ce_SeekableIterator TSRMLS_CC)) { + if (pos != intern->current.pos && instanceof_function(intern->inner.ce, spl_ce_SeekableIterator TSRMLS_CC)) { MAKE_STD_ZVAL(zpos); ZVAL_LONG(zpos, pos); spl_dual_it_free(intern TSRMLS_CC); diff --git a/ext/spl/tests/bug49723.phpt b/ext/spl/tests/bug49723.phpt new file mode 100644 index 0000000000..221e806611 --- /dev/null +++ b/ext/spl/tests/bug49723.phpt @@ -0,0 +1,16 @@ +--TEST-- +LimitIterator: do not seek if not needed +--FILE-- + +===DONE=== +--EXPECT-- +===DONE===