#35470 [Csd]: Assigning global using variable name from array doesn't function

From: Date: Wed, 30 Nov 2005 11:46:55 +0000
Subject: #35470 [Csd]: Assigning global using variable name from array doesn't function
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-89448@lists.php.net to get a copy of this message
ID: 35470 User updated by: prgallier at yahoo dot com Reported By: prgallier at yahoo dot com Status: Closed Bug Type: Scripting Engine problem Operating System: * PHP Version: 5CVS-2005-11-29 (cvs) Assigned To: dmitry New Comment: Tested and working great here. Kudos to Dmitry! Previous Comments: ------------------------------------------------------------------------ [2005-11-30 11:10:53] dmitry@php.net Fixed in CVS HEAD and PHP_5_1. ------------------------------------------------------------------------ [2005-11-29 20:11:25] tony2001@php.net <?php function dotest() { $array = array(array("test", "blah"),array("test", "blah")); $i = 0; while ($row = $array[$i++]) { global ${$row[0]}; ${$row[0]} = $row[1]; } } dotest(); ?> Valgrind shows several errors: ==3742== Invalid read of size 4 ==3742== at 0x823AAEA: zend_fetch_dimension_address (zend_execute.c:1092) ==3742== by 0x826DEE0: ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER (zend_vm_execute.h:20390) ==3742== by 0x823B348: execute (zend_vm_execute.h:88) ==3742== by 0x823B7A9: zend_do_fcall_common_helper_SPEC (zend_vm_execute.h:222) ==3742== by 0x823E294: ZEND_DO_FCALL_SPEC_CONST_HANDLER (zend_vm_execute.h:1578) ==3742== by 0x823B348: execute (zend_vm_execute.h:88) ==3742== by 0x8214E75: zend_execute_scripts (zend.c:1090) ==3742== by 0x81D43AD: php_execute_script (main.c:1704) ==3742== by 0x828025D: main (php_cli.c:1039) etc. ------------------------------------------------------------------------ [2005-11-29 19:58:50] prgallier at yahoo dot com The following generates a segfault on my system: function dotest() { $link = mysql_connect("localhost","test","test"); mysql_select_db("test"); mysql_query("CREATE TABLE config (num smallint(5) unsigned NOT NULL auto_increment, conf varchar(20) NOT NULL default '')"); mysql_query("INSERT INTO config (conf,type) VALUES('Test1','33')"); $result = mysql_query("SELECT conf,value FROM config"); while ($row = mysql_fetch_row($result)) { global ${$row[0]}; ${$row[0]} = $row[1]; } mysql_free_result($result); } dotest(); echo "Test: $test<br>\n"; ------------------------------------------------------------------------ [2005-11-29 13:09:49] sniper@php.net Dmitry, can you check this out please. ------------------------------------------------------------------------ [2005-11-29 11:33:26] prgallier at yahoo dot com Oops...the expected and actual result fields are switched. ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/35470 -- Edit this bug report at http://bugs.php.net/?id=35470&edit=1

« previous php.bugs (#89448) next »