From: dave at codewhore dot org
Operating system: Linux 2.4
PHP version: 5CVS-2003-05-31 (dev)
PHP Bug Type: Zend Engine 2 problem
Bug description: ZE2 crashes when switch() is used on the result of an assignment
Hi:
When switching on the result of an assignment to a member variable, and
the switch statement has more than one non-default case, ZE2 crashes in
compare_function. Here's a test script:
<?php
class grim_reaper
{
function slaughter($val)
{
switch ($this->foo = $val)
{
case 'foo':
break;
case "Remove this case and I don't crash":
break;
}
}
}
$r = new grim_reaper();
$r->slaughter('ze2');
?>
Here's some valgrind output:
==3548== Conditional jump or move depends on uninitialised value(s)
==3548== at 0x8175234: zend_case_handler
(/archive/Sources/web-server/php-5.0-cvs/Zend/zend_execute.c:3101)
==3548== by 0x816EC54: execute
(/archive/Sources/web-server/php-5.0-cvs/Zend/zend_execute.c:1247)
==3548== by 0x8173AE8: zend_do_fcall_common_helper
(/archive/Sources/web-server/php-5.0-cvs/Zend/zend_execute.c:2654)
==3548== by 0x8173F3E: zend_do_fcall_by_name_handler
(/archive/Sources/web-server/php-5.0-cvs/Zend/zend_execute.c:2725)
==3548==
==3548== Conditional jump or move depends on uninitialised value(s)
==3548== at 0x8178DF8: _get_zval_ptr
(/archive/Sources/web-server/php-5.0-cvs/Zend/zend_execute.c:73)
==3548== by 0x8175295: zend_case_handler
(/archive/Sources/web-server/php-5.0-cvs/Zend/zend_execute.c:3106)
==3548== by 0x816EC54: execute
(/archive/Sources/web-server/php-5.0-cvs/Zend/zend_execute.c:1247)
==3548== by 0x8173AE8: zend_do_fcall_common_helper
(/archive/Sources/web-server/php-5.0-cvs/Zend/zend_execute.c:2654)
==3548==
==3548== Invalid read of size 1
==3548== at 0x81557BD: compare_function
(/archive/Sources/web-server/php-5.0-cvs/Zend/zend_operators.c:1189)
==3548== by 0x8156173: is_equal_function
(/archive/Sources/web-server/php-5.0-cvs/Zend/zend_operators.c:1346)
==3548== by 0x81752AD: zend_case_handler
(/archive/Sources/web-server/php-5.0-cvs/Zend/zend_execute.c:3106)
==3548== by 0x816EC54: execute
(/archive/Sources/web-server/php-5.0-cvs/Zend/zend_execute.c:1247)
==3548== Address 0xC is not stack'd, malloc'd or free'd
Here's a gdb backtrace:
#0 0x081557bd in compare_function (result=0xbfffd47c, op1=0x0,
op2=0x821d398) at
/archive/Sources/web-server/php-5.0-cvs/Zend/zend_operators.c:1189
#1 0x08156174 in is_equal_function (result=0xbfffd47c, op1=0x0,
op2=0x821d398) at
/archive/Sources/web-server/php-5.0-cvs/Zend/zend_operators.c:1346
#2 0x081752ae in zend_case_handler (execute_data=0xbfffd4a0,
op_array=0x821e67c) at
/archive/Sources/web-server/php-5.0-cvs/Zend/zend_execute.c:3106
#3 0x0816ec55 in execute (op_array=0x821e67c) at
/archive/Sources/web-server/php-5.0-cvs/Zend/zend_execute.c:1247
#4 0x08173ae9 in zend_do_fcall_common_helper (execute_data=0xbfffd6b0,
op_array=0x82172fc)
at /archive/Sources/web-server/php-5.0-cvs/Zend/zend_execute.c:2654
#5 0x08173f3f in zend_do_fcall_by_name_handler (execute_data=0xbfffd6b0,
op_array=0x82172fc)
at /archive/Sources/web-server/php-5.0-cvs/Zend/zend_execute.c:2725
#6 0x0816ec55 in execute (op_array=0x82172fc) at
/archive/Sources/web-server/php-5.0-cvs/Zend/zend_execute.c:1247
#7 0x08159c1d in zend_execute_scripts (type=8, retval=0x0, file_count=3)
at /archive/Sources/web-server/php-5.0-cvs/Zend/zend.c:1008
#8 0x0811a3de in php_execute_script (primary_file=0xbffffab0) at
/archive/Sources/web-server/php-5.0-cvs/main/main.c:1678
#9 0x0817d574 in main (argc=2, argv=0xbffffb54) at
/archive/Sources/web-server/php-5.0-cvs/sapi/cli/php_cli.c:909
#10 0x401aabb4 in __libc_start_main () from /lib/libc.so.6
Let me know if there's anything else I can do.
Thanks,
- Dave
[EMAIL PROTECTED]
--
Edit bug report at http://bugs.php.net/?id=23925&edit=1
--
Try a CVS snapshot: http://bugs.php.net/fix.php?id=23925&r=trysnapshot
Fixed in CVS: http://bugs.php.net/fix.php?id=23925&r=fixedcvs
Fixed in release: http://bugs.php.net/fix.php?id=23925&r=alreadyfixed
Need backtrace: http://bugs.php.net/fix.php?id=23925&r=needtrace
Try newer version: http://bugs.php.net/fix.php?id=23925&r=oldversion
Not developer issue: http://bugs.php.net/fix.php?id=23925&r=support
Expected behavior: http://bugs.php.net/fix.php?id=23925&r=notwrong
Not enough info: http://bugs.php.net/fix.php?id=23925&r=notenoughinfo
Submitted twice: http://bugs.php.net/fix.php?id=23925&r=submittedtwice
register_globals: http://bugs.php.net/fix.php?id=23925&r=globals
PHP 3 support discontinued: http://bugs.php.net/fix.php?id=23925&r=php3
Daylight Savings: http://bugs.php.net/fix.php?id=23925&r=dst
IIS Stability: http://bugs.php.net/fix.php?id=23925&r=isapi
Install GNU Sed: http://bugs.php.net/fix.php?id=23925&r=gnused