php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #63907 SegFault
Submitted: 2013-01-04 21:41 UTC Modified: 2016-11-18 21:21 UTC
From: anilvarghese25 at gmail dot com Assigned:
Status: Wont fix Package: APC (PECL)
PHP Version: 5.4.10 OS: Linux
Private report: No CVE-ID: None
 [2013-01-04 21:41 UTC] anilvarghese25 at gmail dot com
Description:
------------
Apache process crashes with a segfault. Was able to narrow it down to 
zend_vm_execute.h line 580 using the backtrace. Looks like fbc->common.fn_flags 
in the code is causing the issue.



if (UNEXPECTED((fbc->common.fn_flags & (ZEND_ACC_ABSTRACT|ZEND_ACC_DEPRECATED)) 
!= 0)) {
                if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_ABSTRACT) != 0)) 
{
                        zend_error_noreturn(E_ERROR, "Cannot call abstract 
method %s::%s()", fbc->common.scope->name, fbc->common.function_name);
                        CHECK_EXCEPTION();
                        ZEND_VM_NEXT_OPCODE();
                }
                if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 
0)) {
                        zend_error(E_DEPRECATED, "Function %s%s%s() is 
deprecated",
                                fbc->common.scope ? fbc->common.scope->name : 
"",
                                fbc->common.scope ? "::" : "",
                                fbc->common.function_name);
                }
        }

Actual result:
--------------
Program received signal SIGSEGV, Segmentation fault.
0x00002aaab3d80b87 in zend_do_fcall_common_helper_SPEC 
(execute_data=0x2aaab8574288) at /tmp/php-5.4.10/Zend/zend_vm_execute.h:580
580             if (UNEXPECTED((fbc->common.fn_flags & 
(ZEND_ACC_ABSTRACT|ZEND_ACC_DEPRECATED)) != 0)) {
(gdb) bt
#0  0x00002aaab3d80b87 in zend_do_fcall_common_helper_SPEC 
(execute_data=0x2aaab8574288) at /tmp/php-5.4.10/Zend/zend_vm_execute.h:580
#1  0x00002aaab3d893fc in ZEND_DO_FCALL_SPEC_CONST_HANDLER 
(execute_data=0x2aaab8574288) at /tmp/php-5.4.10/Zend/zend_vm_execute.h:2235
#2  0x00002aaab3d7fb1e in execute (op_array=0x2aaaed5fc150) at /tmp/php-
5.4.10/Zend/zend_vm_execute.h:410
#3  0x00002aaab3d417d4 in zend_execute_scripts (type=8, retval=0x0, 
file_count=3) at /tmp/php-5.4.10/Zend/zend.c:1309
#4  0x00002aaab3ca9006 in php_execute_script (primary_file=0x7fffffffe430) at 
/tmp/php-5.4.10/main/main.c:2482
#5  0x00002aaab3e970e7 in php_handler (r=0x2aaaecd91ff0) at /tmp/php-
5.4.10/sapi/apache2handler/sapi_apache2.c:667
#6  0x00002aaaaaad4d1a in ap_run_handler ()
#7  0x00002aaaaaad81a8 in ap_invoke_handler ()
#8  0x00002aaaaaae2ca8 in ap_process_request ()
#9  0x00002aaaaaadfee0 in ?? ()
#10 0x00002aaaaaadbfa2 in ap_run_process_connection ()
#11 0x00002aaaaaae70d9 in ?? ()
#12 0x00002aaaaaae72d9 in ?? ()
#13 0x00002aaaaaae7df7 in ap_mpm_run ()
#14 0x00002aaaaaac1fd8 in main ()


Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2013-01-04 22:00 UTC] pierrick@php.net
Thank you for this bug report. To properly diagnose the problem, we
need a short but complete example script to be able to reproduce
this bug ourselves. 

A proper reproducing script starts with <?php and ends with ?>,
is max. 10-20 lines long and does not require any external 
resources such as databases, etc. If the script requires a 
database to demonstrate the issue, please make sure it creates 
all necessary tables, stored procedures etc.

Please avoid embedding huge scripts into the report.


 [2013-01-04 22:00 UTC] pierrick@php.net
-Status: Open +Status: Feedback
 [2013-01-09 23:11 UTC] anilvarghese25 at gmail dot com
-Status: Feedback +Status: Open
 [2013-01-09 23:11 UTC] anilvarghese25 at gmail dot com
This might not be very helpful. But it looks like bad apc caching. I was able to 
narrow it down to the following code. Its part of the Zend Framework. If I force 
an opcode recache, it works fine. I am using APC 3.1.14. 

<?php 
class Zend_Filter extends Zend_Filter_Interface {

public static function get($value, $classBaseName, array $args = array(),   
$namespaces = array())
    {
        $namespaces = array_merge(array('Zend_Filter'), (array) $namespaces);
        foreach ($namespaces as $namespace) {
            $className = $namespace . '_' . ucfirst($classBaseName);
            $class = new ReflectionClass($className);
            if ($class->implementsInterface('Zend_Filter_Interface')) {
                if ($class->hasMethod('__construct')) {
                    $object = $class->newInstanceArgs($args);
                } else {
                    $object = $class->newInstance();
                }
                return $object->filter($value);
            }
        }

        throw new Zend_Filter_Exception("Filter class not found from basename 
'$classBaseName'");
    }
}
?>
 [2013-10-24 06:37 UTC] yohgaki@php.net
-Package: *General Issues +Package: APC
 [2016-11-18 21:21 UTC] kalle@php.net
-Status: Open +Status: Wont fix
 [2016-11-18 21:21 UTC] kalle@php.net
APC is no longer supported in favor of opcache that comes bundled with PHP, if you wish to use the user cache, then look at PECL/APCu.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu Dec 26 12:01:30 2024 UTC