From: Ilia Alshanetsky Date: Tue, 30 Mar 2004 19:08:43 +0000 (+0000) Subject: Fixed bug #27782 (Wrong behaviour of next(), prev() and each()). X-Git-Tag: php-5.0.0RC2RC1~147 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ec4655f864e2c9104e4130806d3dd0db6602495a;p=php Fixed bug #27782 (Wrong behaviour of next(), prev() and each()). --- diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c index 42a82754dc..d15e6fb55a 100644 --- a/Zend/zend_builtin_functions.c +++ b/Zend/zend_builtin_functions.c @@ -368,6 +368,9 @@ ZEND_FUNCTION(each) return; } if (zend_hash_get_current_data(target_hash, (void **) &entry_ptr)==FAILURE) { + if (!target_hash->pInternalPointer) { + zend_hash_internal_pointer_end(target_hash); + } RETURN_FALSE; } array_init(return_value); diff --git a/ext/standard/array.c b/ext/standard/array.c index 539848322e..831357e533 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -740,6 +740,10 @@ PHP_FUNCTION(prev) RETURN_FALSE; } zend_hash_move_backwards(target_hash); + if (!target_hash->pInternalPointer) { + zend_hash_internal_pointer_reset(target_hash); + RETURN_FALSE; + } if (return_value_used) { if (zend_hash_get_current_data(target_hash, (void **) &entry) == FAILURE) { @@ -768,6 +772,10 @@ PHP_FUNCTION(next) RETURN_FALSE; } zend_hash_move_forward(target_hash); + if (!target_hash->pInternalPointer) { + zend_hash_internal_pointer_end(target_hash); + RETURN_FALSE; + } if (return_value_used) { if (zend_hash_get_current_data(target_hash, (void **) &entry) == FAILURE) { diff --git a/ext/standard/tests/array/bug27782.phpt b/ext/standard/tests/array/bug27782.phpt new file mode 100644 index 0000000000..2c8c6753d4 --- /dev/null +++ b/ext/standard/tests/array/bug27782.phpt @@ -0,0 +1,32 @@ +--TEST-- +Bug #27782 (each(), next(), prev() mange array position) +--FILE-- + +--EXPECT-- +c +b +a +b +c +c +b +a