Bug #16227 Updated: Wrong zval allocation? while(list() = each()) behavior is inconsistent due to th

From: Date: Sat, 23 Mar 2002 01:55:40 +0000
Subject: Bug #16227 Updated: Wrong zval allocation? while(list() = each()) behavior is inconsistent due to th
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-3180@lists.php.net to get a copy of this message
ID: 16227 Updated by: yohgaki@php.net Reported By: php.net@alienbill.com Status: Open Bug Type: Arrays related Operating System: Tru64 UNIX 5.0a PHP Version: 4.0.6 Assigned To: hholzgra New Comment: BTW, I haven't check the exact behavior. Zend might be resetting internal hash position due to the assignment. Previous Comments: ------------------------------------------------------------------------ [2002-03-22 20:48:18] yohgaki@php.net I forgot about reset() since behavior is inconsistent :( Anyway, this is still not right. Zend engine is allocating new zval for $insidearray while it should allocate $placeholder. --- $placeholder = $insidearray; while(list(,$innerval) = each($insidearray)){ print "inloop $innerval for $outerval<br>"; --- This bug causes nasty bug in script. If it is not easy to fix, may be we should suspend this bug? ------------------------------------------------------------------------ [2002-03-22 20:29:04] hholzgra@php.net ever heard of reset() ? ------------------------------------------------------------------------ [2002-03-22 20:19:56] yohgaki@php.net Thanks for reporting. I verified with 4.2.0-dev & 4.0.6. This is _VERY_ bad bug... [root@dev etc]# php <?php $outsidearray = array("key1","key2"); $insidearray = array("0","1"); while(list(,$outerval) = each($outsidearray)){ //$placeholder = $insidearray; while(list(,$innerval) = each($insidearray)){ print "inloop $innerval for $outerval<br>"; } } ?> inloop 0 for key1<br> inloop 1 for key1<br> [root@dev etc]# php <?php $outsidearray = array("key1","key2"); $insidearray = array("0","1"); while(list(,$outerval) = each($outsidearray)){ $placeholder = $insidearray; while(list(,$innerval) = each($insidearray)){ print "inloop $innerval for $outerval<br>"; } } ?> inloop 0 for key1<br> inloop 1 for key1<br> inloop 0 for key2<br> inloop 1 for key2<br> [root@dev etc]# [root@dev etc]# php -v 4.2.0-dev ------------------------------------------------------------------------ [2002-03-22 19:52:31] php.net@alienbill.com nested while(list=each) produces weird results. this code <?php $outsidearray = array("key1","key2"); $insidearray = array("0","1"); while(list(,$outerval) = each($outsidearray)){ //$placeholder = $insidearray; while(list(,$innerval) = each($insidearray)){ print "inloop $innerval for $outerval<br>"; } } ?> only gets to key1 of the outer loop. But if you uncomment the $placeholder line, it works ok. ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=16227&edit=1

« previous php.bugs (#3180) next »