Edit report at https://bugs.php.net/bug.php?id=62384&edit=1

 ID:                 62384
 Comment by:         alexander dot carver at gmail dot com
 Reported by:        alexander dot carver at gmail dot com
 Summary:            Attempting to invoke a Closure more than once causes
                     segfault
 Status:             Open
 Type:               Bug
 Package:            Reflection related
 Operating System:   Debian 6.0
 PHP Version:        5.3.14
 Block user comment: N
 Private report:     N

 New Comment:

Yes I can.

php5 -m :
[PHP Modules]
bcmath bz2
calendar Core ctype curl
date dba dom
ereg exif
fileinfo filter ftp
gd gettext
hash
iconv
json
libxml
mbstring mhash mysql mysqli mysqlnd
openssl
pcntl pcre PDO pdo_mysql pdo_sqlite Phar posix
readline Reflection
session shmop SimpleXML soap sockets SPL
SQLite sqlite3 ssh2 standard
sysvmsg sysvsem sysvshm
tokenizer
wddx
xml xmlreader xmlwriter
yaml
zip
zlib

[Zend Modules]


Previous Comments:
------------------------------------------------------------------------
[2012-06-22 02:19:25] Reeze dot xia at gmail dot com

Can you reproduce it when apc and xdebug disabled?

------------------------------------------------------------------------
[2012-06-21 23:10:37] alexander dot carver at gmail dot com

Wrong version number, sorry.

------------------------------------------------------------------------
[2012-06-21 23:08:39] alexander dot carver at gmail dot com

Description:
------------
The code below should be fairly self-explanatory. Invoking a reflection of the 
__invoke method of the Closure class more than once per reflection instance 
causes a segfault. This happens regardless of context or argument parameters 
passed to ReflectionMethod::invokeArgs(). Can't imagine this is a common use 
case 
but thought I'd share anyway.

PHP Version is 5.3.14.

I don't have php configured to get a backtrace at the moment, and my .ini is 
pretty average. If you can't reproduce it with the script below I'll look into 
it 
more.

php5 -m :

[PHP Modules]
apc
bcmath
bz2
calendar
Core
ctype
curl
date
dba
dom
ereg
exif
fileinfo
filter
ftp
gd
gettext
hash
iconv
json
libxml
mbstring
mhash
mysql
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
posix
readline
Reflection
session
shmop
SimpleXML
soap
sockets
SPL
SQLite
sqlite3
ssh2
standard
sysvmsg
sysvsem
sysvshm
tokenizer
wddx
xdebug
xml
xmlreader
xmlwriter
yaml
zip
zlib

[Zend Modules]
Xdebug

Test script:
---------------
<?php

$closure1   = function($val){ return $val; };
$closure2   = function($val){ return $val; };

$reflection_class   = new ReflectionClass($closure1);
$reflection_method  = $reflection_class->getMethod('__invoke');

$arguments1         = array('hello');
$arguments2         = array('world');

// Invoking once is OK...
print $reflection_method->invokeArgs($closure1, $arguments1);

if(true){   
    // But don't do it again!
   #print $reflection_method->invokeArgs($closure1, $arguments1);
    
    // Using different arguments per invokation makes no difference :(
   #print $reflection_method->invokeArgs($closure1, $arguments2);
    
    // Doesn't matter if you attempt to invoke a different closure with the 
same reflection.
    print $reflection_method->invokeArgs($closure2, $arguments1);
}

?>

Expected result:
----------------
"helloworld" printed

Actual result:
--------------
Segmentationfault


------------------------------------------------------------------------



-- 
Edit this bug report at https://bugs.php.net/bug.php?id=62384&edit=1

Reply via email to