From:             nikic
Operating system: 
PHP version:      5.4SVN-2012-03-04 (SVN)
Package:          Reproducible crash
Bug Type:         Bug
Bug description:call_user_func_array with more than 16333 arguments leaks / 
crashes

Description:
------------
The following code:

call_user_func_array(function(&$a) {}, $array = array_fill(0, 16334,
"*"));

Produces this output:

Warning: Parameter 1 to {closure}() expected to be a reference, value given
in Command line code on line 1
[Sun Mar  4 16:17:15 2012]  Script:  '-'
/home/nikic/dev/php-src/trunk/Zend/zend_hash.c(832) :  Freeing 0xB72FC03C
(36 bytes), script=-
/home/nikic/dev/php-src/trunk/Zend/zend_hash.c(412) : Actual location
(location was relayed)
Last leak repeated 16333 times
[Sun Mar  4 16:17:15 2012]  Script:  '-'
/home/nikic/dev/php-src/trunk/Zend/zend_hash.c(376) :  Freeing 0xB744103C
(65536 bytes), script=-
/home/nikic/dev/php-src/trunk/Zend/zend_alloc.c(2529) : Actual location
(location was relayed)
[Sun Mar  4 16:17:15 2012]  Script:  '-'
/home/nikic/dev/php-src/trunk/Zend/zend_API.c(315) :  Freeing 0xB74C0D50
(44 bytes), script=-
/home/nikic/dev/php-src/trunk/Zend/zend_variables.c(134) : Actual location
(location was relayed)
Last leak repeated 1 time
[Sun Mar  4 16:17:15 2012]  Script:  '-'
/home/nikic/dev/php-src/trunk/Zend/zend_vm_execute.h(6788) :  Freeing
0xB78560A8 (20 bytes), script=-
[Sun Mar  4 16:17:15 2012]  Script:  '-'
/home/nikic/dev/php-src/trunk/Zend/zend_vm_execute.h(2378) :  Freeing
0xB7857380 (2 bytes), script=-
/home/nikic/dev/php-src/trunk/Zend/zend_variables.c(121) : Actual location
(location was relayed)
[Sun Mar  4 16:17:15 2012]  Script:  '-'
/home/nikic/dev/php-src/trunk/Zend/zend_vm_execute.h(2375) :  Freeing
0xB7858360 (20 bytes), script=-
=== Total 16340 memory leaks detected ===

If you do some more stuff after the call PHP will eventually segfault.

This only happens if the *first* argument of the callback is by-ref and
only happens after a certain number of arguments (for me it starts with
16334). That's why I guess that this has something to do with
http://lxr.php.net/xref/PHP_TRUNK/Zend/zend_execute_API.c#862 (i == 0 =>
branch not entered) and
http://lxr.php.net/xref/PHP_TRUNK/Zend/zend_execute_API.c#851 (as it is
only for large argument numbers).


-- 
Edit bug report at https://bugs.php.net/bug.php?id=61273&edit=1
-- 
Try a snapshot (PHP 5.4):            
https://bugs.php.net/fix.php?id=61273&r=trysnapshot54
Try a snapshot (PHP 5.3):            
https://bugs.php.net/fix.php?id=61273&r=trysnapshot53
Try a snapshot (trunk):              
https://bugs.php.net/fix.php?id=61273&r=trysnapshottrunk
Fixed in SVN:                        
https://bugs.php.net/fix.php?id=61273&r=fixed
Fixed in SVN and need be documented: 
https://bugs.php.net/fix.php?id=61273&r=needdocs
Fixed in release:                    
https://bugs.php.net/fix.php?id=61273&r=alreadyfixed
Need backtrace:                      
https://bugs.php.net/fix.php?id=61273&r=needtrace
Need Reproduce Script:               
https://bugs.php.net/fix.php?id=61273&r=needscript
Try newer version:                   
https://bugs.php.net/fix.php?id=61273&r=oldversion
Not developer issue:                 
https://bugs.php.net/fix.php?id=61273&r=support
Expected behavior:                   
https://bugs.php.net/fix.php?id=61273&r=notwrong
Not enough info:                     
https://bugs.php.net/fix.php?id=61273&r=notenoughinfo
Submitted twice:                     
https://bugs.php.net/fix.php?id=61273&r=submittedtwice
register_globals:                    
https://bugs.php.net/fix.php?id=61273&r=globals
PHP 4 support discontinued:          
https://bugs.php.net/fix.php?id=61273&r=php4
Daylight Savings:                    https://bugs.php.net/fix.php?id=61273&r=dst
IIS Stability:                       
https://bugs.php.net/fix.php?id=61273&r=isapi
Install GNU Sed:                     
https://bugs.php.net/fix.php?id=61273&r=gnused
Floating point limitations:          
https://bugs.php.net/fix.php?id=61273&r=float
No Zend Extensions:                  
https://bugs.php.net/fix.php?id=61273&r=nozend
MySQL Configuration Error:           
https://bugs.php.net/fix.php?id=61273&r=mysqlcfg

Reply via email to