From:             toni dot viemero at iki dot fi
Operating system: FreeBSD 5.4-BETA4
PHP version:      5.0.1
PHP Bug Type:     Reproducible crash
Bug description:  switch() with function and call in it segfaults

Description:
------------
I was investigating why Wordpress (www.wordpress.org) wp-login.php
segfaults my apache child and stripped down the code as low as possible to
reproduce segfault. 

[EMAIL PROTECTED]:~]$ php-5.0.1/sapi/cli/php -v
PHP 5.0.1 (cli) (built: Sep 18 2004 02:34:23) (DEBUG)
Copyright (c) 1997-2004 The PHP Group
Zend Engine v2.0.1, Copyright (c) 1998-2004 Zend Technologies

[EMAIL PROTECTED]:~]$ php-5.0.1/sapi/cli/php -e segfault.php
Segmentation fault (core dumped)

Compiled with:
./configure --enable-versioning --enable-memory-limit --enable-debug
--with-layout=GNU --with-config-file-scan-dir=/tmp --disable-all
--enable-libxml --enable-spl --with-regex=php
--with-apxs2=/usr/local/sbin/apxs --disable-ipv6 --prefix=/tmp
--with-bz2=/usr --enable-ctype --with-curl=/usr/local --enable-dba
--enable-dom --enable-exif --enable-ftp --with-gd
--with-freetype-dir=/usr/local --with-jpeg-dir=/usr/local
--with-png-dir=/usr/local --with-gettext=/usr/local
--with-iconv=/usr/local --with-imap=/usr/local --enable-mbstring
--with-mcrypt=/usr/local --with-mhash=/usr/local --with-mysql=/usr/local
--with-openssl=/usr --with-openssl-dir=/usr --with-pcre-regex=yes
--with-pgsql=/usr/local --enable-posix --enable-session --enable-simplexml
--with-snmp=/usr/local --enable-ucd-snmp-hack --enable-soap
--with-libxml-dir=/usr/local --enable-sockets --with-sqlite
--with-tidy=/usr/local --enable-tokenizer --enable-wddx --enable-xml
--with-xmlrpc --with-expat-dir=/usr/local --with-iconv-dir=/usr/local
--with-libxml-dir=/usr/local --with-xsl=/usr/local --with-zlib=/usr
--with-zlib-dir=/usr

Reproduce code:
---------------
<?php
$action = '';

switch ($action) {
    default:
        function this_will_segfault() {
            return true;
        }
        if ( (this_will_segfault()) ) {
            print "true\n";
        }
        break;
}
?>

Expected result:
----------------
"true" printed.

Actual result:
--------------
(gdb) bt
#0  0x08301b9c in _zval_ptr_dtor (zval_ptr=0xbfbfcef4,
    __zend_filename=0x84d5990 "/home/toni/php-5.0.1/Zend/zend_execute.c",
__zend_lineno=208)
    at /home/toni/php-5.0.1/Zend/zend_execute_API.c:389
#1  0x0833b202 in zend_switch_free (opline=0x85b0908, Ts=0xbfbfcec0) at
/home/toni/php-5.0.1/Zend/zend_execute.c:208
#2  0x0833b44f in zend_switch_free_handler (execute_data=0xbfbfcef0,
opline=0x85b0908, op_array=0x865eb00)
    at /home/toni/php-5.0.1/Zend/zend_execute.c:3234
#3  0x08333ae1 in execute (op_array=0x865eb00) at
/home/toni/php-5.0.1/Zend/zend_execute.c:1400
#4  0x083395e4 in zend_do_fcall_common_helper (execute_data=0xbfbfd060,
opline=0x866644c, op_array=0x8658824)
    at /home/toni/php-5.0.1/Zend/zend_execute.c:2737
#5  0x08339c9c in zend_do_fcall_by_name_handler (execute_data=0xbfbfd060,
opline=0x866644c, op_array=0x8658824)
    at /home/toni/php-5.0.1/Zend/zend_execute.c:2822
#6  0x08333ae1 in execute (op_array=0x8658824) at
/home/toni/php-5.0.1/Zend/zend_execute.c:1400
#7  0x0830f5b0 in zend_execute_scripts (type=8, retval=0x0, file_count=3)
at /home/toni/php-5.0.1/Zend/zend.c:1061
#8  0x082c8b27 in php_execute_script (primary_file=0xbfbfe794) at
/home/toni/php-5.0.1/main/main.c:1627
#9  0x0834038c in main (argc=3, argv=0xbfbfe7f4) at
/home/toni/php-5.0.1/sapi/cli/php_cli.c:943
(gdb) frame 0
#0  0x08301b9c in _zval_ptr_dtor (zval_ptr=0xbfbfcef4,
    __zend_filename=0x84d5990 "/home/toni/php-5.0.1/Zend/zend_execute.c",
__zend_lineno=208)
    at /home/toni/php-5.0.1/Zend/zend_execute_API.c:389
389             (*zval_ptr)->refcount--;
(gdb) print (char
*)(executor_globals.function_state_ptr->function)->common.function_name
$1 = 0x865dba4 "this_will_segfault"
(gdb) print (char *)executor_globals.active_op_array->function_name
$2 = 0x865dba4 "this_will_segfault"
(gdb) print (char *)executor_globals.active_op_array->filename
$3 = 0x865db64 "/home/toni/segfault.php"

-- 
Edit bug report at http://bugs.php.net/?id=30142&edit=1
-- 
Try a CVS snapshot (php4):   http://bugs.php.net/fix.php?id=30142&r=trysnapshot4
Try a CVS snapshot (php5.0): http://bugs.php.net/fix.php?id=30142&r=trysnapshot50
Try a CVS snapshot (php5.1): http://bugs.php.net/fix.php?id=30142&r=trysnapshot51
Fixed in CVS:                http://bugs.php.net/fix.php?id=30142&r=fixedcvs
Fixed in release:            http://bugs.php.net/fix.php?id=30142&r=alreadyfixed
Need backtrace:              http://bugs.php.net/fix.php?id=30142&r=needtrace
Need Reproduce Script:       http://bugs.php.net/fix.php?id=30142&r=needscript
Try newer version:           http://bugs.php.net/fix.php?id=30142&r=oldversion
Not developer issue:         http://bugs.php.net/fix.php?id=30142&r=support
Expected behavior:           http://bugs.php.net/fix.php?id=30142&r=notwrong
Not enough info:             http://bugs.php.net/fix.php?id=30142&r=notenoughinfo
Submitted twice:             http://bugs.php.net/fix.php?id=30142&r=submittedtwice
register_globals:            http://bugs.php.net/fix.php?id=30142&r=globals
PHP 3 support discontinued:  http://bugs.php.net/fix.php?id=30142&r=php3
Daylight Savings:            http://bugs.php.net/fix.php?id=30142&r=dst
IIS Stability:               http://bugs.php.net/fix.php?id=30142&r=isapi
Install GNU Sed:             http://bugs.php.net/fix.php?id=30142&r=gnused
Floating point limitations:  http://bugs.php.net/fix.php?id=30142&r=float
MySQL Configuration Error:   http://bugs.php.net/fix.php?id=30142&r=mysqlcfg

Reply via email to