From: popsul1993 at gmail dot com
Operating system: Ubuntu 12.04
PHP version: 5.4.6
Package: Reproducible crash
Bug Type: Bug
Bug description:Segfault on call_user_func_array
Description:
------------
PHP crash through deep nested recursion over call_user_func_array
Compilation config:
./configure '--enable-fpm' '--enable-mbstring' '--with-mysql'
'--with-regex=php'
'--with-tidy=shared' '--prefix=/usr/local/' --with-config-file-scan-
dir=/usr/local/etc/php5
Also, PHP >=5.4.5 have a crazy behavior, i.e. my implementation of
ActiveRecord
have method 'buildSql' (with public visibility), but when run e.g. $this-
>buildSql(); that call send to __call(), where there is a checing with code
method_exists($this, $method_name), which returning true and after that
calling
call_user_func_array([$this, $method_name], $parameters);, and that
invocation
again sending to __call(), although method buildSql exists and visibled.
Test script:
---------------
class Test {
public function foo() {
return call_user_func_array([$this, 'foo'], func_get_args());
}
}
$test = new Test();
$test->foo();
Actual result:
--------------
(gdb) run
Starting program: /usr/local/bin/php -e ./tests/testrecursion.php
Program received signal SIGSEGV, Segmentation fault.
zend_is_callable_ex (callable=0xb70bd424, object_ptr=<optimized out>,
check_flags=0, callable_name=0x0, callable_name_len=0xbf800000,
fcc=0xbf8001b4, error=0xbf800108) at
/home/popsul/ÐагÑÑзки/php-
5.4.6/Zend/zend_API.c:2970
2970 if
(zend_hash_num_elements(Z_ARRVAL_P(callable)) == 2) {
(gdb) backtrace
#0 zend_is_callable_ex (callable=0xb70bd424, object_ptr=<optimized out>,
check_flags=0, callable_name=0x0, callable_name_len=0xbf800000,
fcc=0xbf8001b4, error=0xbf800108) at
/home/popsul/ÐагÑÑзки/php-
5.4.6/Zend/zend_API.c:2970
#1 0x0834a89f in zend_fcall_info_init (callable=0xb70bd424, check_flags=0,
fci=0xbf800190, fcc=0xbf8001b4, callable_name=0x0, error=0xbf800108)
at /home/popsul/ÐагÑÑзки/php-5.4.6/Zend/zend_API.c:3126
#2 0x0834af0a in zend_parse_arg_impl (severity=<synthetic pointer>,
error=0xbf8000f4, spec=<synthetic pointer>, va=0xbf800158, arg=0xb70ad254,
arg_num=<optimized out>) at /home/popsul/ÐагÑÑзки/php-
5.4.6/Zend/zend_API.c:616
#3 zend_parse_arg (quiet=0, spec=<synthetic pointer>, va=0xbf800158,
arg=0xb70ad254, arg_num=1)
at /home/popsul/ÐагÑÑзки/php-5.4.6/Zend/zend_API.c:675
#4 zend_parse_va_args (num_args=1, type_spec=0x878128a "fa/",
va=0xbf800158,
flags=0) at /home/popsul/ÐагÑÑзки/php-5.4.6/Zend/zend_API.c:844
#5 0x0834c6d2 in zend_parse_parameters (num_args=2, type_spec=0x878128a
"fa/")
at /home/popsul/ÐагÑÑзки/php-5.4.6/Zend/zend_API.c:895
#6 0x08256b77 in zif_call_user_func_array (ht=2, return_value=0xb70bd48c,
return_value_ptr=0x0, this_ptr=0x0, return_value_used=1)
at
/home/popsul/ÐагÑÑзки/php-5.4.6/ext/standard/basic_functions.c:4742
#7 0x083df418 in zend_do_fcall_common_helper_SPEC (execute_data=<optimized
out>)
at /home/popsul/ÐагÑÑзки/php-5.4.6/Zend/zend_vm_execute.h:642
#8 0x083a242d in execute (op_array=<optimized out>) at /home/popsul/
ÐагÑÑзки/php-5.4.6/Zend/zend_vm_execute.h:410
#9 0x08336060 in zend_call_function (fci=0xbf8003a0, fci_cache=0xbf8003c4)
at
/home/popsul/ÐагÑÑзки/php-5.4.6/Zend/zend_execute_API.c:958
#10 0x08256ba0 in zif_call_user_func_array (ht=2, return_value=0xb70bd310,
return_value_ptr=0x0, this_ptr=0x0, return_value_used=1)
at
/home/popsul/ÐагÑÑзки/php-5.4.6/ext/standard/basic_functions.c:4749
#11 0x083df418 in zend_do_fcall_common_helper_SPEC (execute_data=<optimized
out>)
at /home/popsul/ÐагÑÑзки/php-5.4.6/Zend/zend_vm_execute.h:642
#12 0x083a242d in execute (op_array=<optimized out>) at /home/popsul/
ÐагÑÑзки/php-5.4.6/Zend/zend_vm_execute.h:410
#13 0x08336060 in zend_call_function (fci=0xbf8005b0, fci_cache=0xbf8005d4)
at
/home/popsul/ÐагÑÑзки/php-5.4.6/Zend/zend_execute_API.c:958
#14 0x08256ba0 in zif_call_user_func_array (ht=2, return_value=0xb70bd194,
return_value_ptr=0x0, this_ptr=0x0, return_value_used=1)
at
/home/popsul/ÐагÑÑзки/php-5.4.6/ext/standard/basic_functions.c:4749
#15 0x083df418 in zend_do_fcall_common_helper_SPEC (execute_data=<optimized
out>)
at /home/popsul/ÐагÑÑзки/php-5.4.6/Zend/zend_vm_execute.h:642
#16 0x083a242d in execute (op_array=<optimized out>) at /home/popsul/
ÐагÑÑзки/php-5.4.6/Zend/zend_vm_execute.h:410
#17 0x08336060 in zend_call_function (fci=0xbf8007c0, fci_cache=0xbf8007e4)
at
/home/popsul/ÐагÑÑзки/php-5.4.6/Zend/zend_execute_API.c:958
#18 0x08256ba0 in zif_call_user_func_array (ht=2, return_value=0xb70bd018,
return_value_ptr=0x0, this_ptr=0x0, return_value_used=1)
at
/home/popsul/ÐагÑÑзки/php-5.4.6/ext/standard/basic_functions.c:4749
#19 0x083df418 in zend_do_fcall_common_helper_SPEC (execute_data=<optimized
out>)
at /home/popsul/ÐагÑÑзки/php-5.4.6/Zend/zend_vm_execute.h:642
#20 0x083a242d in execute (op_array=<optimized out>) at /home/popsul/
ÐагÑÑзки/php-5.4.6/Zend/zend_vm_execute.h:410
#21 0x08336060 in zend_call_function (fci=0xbf8009d0, fci_cache=0xbf8009f4)
at
/home/popsul/ÐагÑÑзки/php-5.4.6/Zend/zend_execute_API.c:958
#22 0x08256ba0 in zif_call_user_func_array (ht=2, return_value=0xb70bce9c,
return_value_ptr=0x0, this_ptr=0x0, return_value_used=1)
at
/home/popsul/ÐагÑÑзки/php-5.4.6/ext/standard/basic_functions.c:4749
#23 0x083df418 in zend_do_fcall_common_helper_SPEC (execute_data=<optimized
out>)
at /home/popsul/ÐагÑÑзки/php-5.4.6/Zend/zend_vm_execute.h:642
--
Edit bug report at https://bugs.php.net/bug.php?id=62854&edit=1
--
Try a snapshot (PHP 5.4):
https://bugs.php.net/fix.php?id=62854&r=trysnapshot54
Try a snapshot (PHP 5.3):
https://bugs.php.net/fix.php?id=62854&r=trysnapshot53
Try a snapshot (trunk):
https://bugs.php.net/fix.php?id=62854&r=trysnapshottrunk
Fixed in SVN:
https://bugs.php.net/fix.php?id=62854&r=fixed
Fixed in SVN and need be documented:
https://bugs.php.net/fix.php?id=62854&r=needdocs
Fixed in release:
https://bugs.php.net/fix.php?id=62854&r=alreadyfixed
Need backtrace:
https://bugs.php.net/fix.php?id=62854&r=needtrace
Need Reproduce Script:
https://bugs.php.net/fix.php?id=62854&r=needscript
Try newer version:
https://bugs.php.net/fix.php?id=62854&r=oldversion
Not developer issue:
https://bugs.php.net/fix.php?id=62854&r=support
Expected behavior:
https://bugs.php.net/fix.php?id=62854&r=notwrong
Not enough info:
https://bugs.php.net/fix.php?id=62854&r=notenoughinfo
Submitted twice:
https://bugs.php.net/fix.php?id=62854&r=submittedtwice
register_globals:
https://bugs.php.net/fix.php?id=62854&r=globals
PHP 4 support discontinued:
https://bugs.php.net/fix.php?id=62854&r=php4
Daylight Savings: https://bugs.php.net/fix.php?id=62854&r=dst
IIS Stability:
https://bugs.php.net/fix.php?id=62854&r=isapi
Install GNU Sed:
https://bugs.php.net/fix.php?id=62854&r=gnused
Floating point limitations:
https://bugs.php.net/fix.php?id=62854&r=float
No Zend Extensions:
https://bugs.php.net/fix.php?id=62854&r=nozend
MySQL Configuration Error:
https://bugs.php.net/fix.php?id=62854&r=mysqlcfg