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);
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) {
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) {
--- /dev/null
+--TEST--
+Bug #27782 (each(), next(), prev() mange array position)
+--FILE--
+<?php
+$a = array("a", "b", "c");
+reset($a);
+
+while (next($a) !== false);
+
+echo current($a) . "\n";
+echo prev($a) . "\n";
+
+reset($a);
+
+while (list(,$foo) = each($a)) {
+ echo $foo . "\n";
+}
+echo current($a) . "\n";
+
+while ($foo = prev($a)) {
+ echo $foo . "\n";
+}
+?>
+--EXPECT--
+c
+b
+a
+b
+c
+c
+b
+a