Bug #62384 [Asn->Csd]: Attempting to invoke a Closure more than once causes segfault
| From: | felipe@php.net | Date: | Fri, 22 Jun 2012 15:08:44 +0000 |
| Subject: | Bug #62384 [Asn->Csd]: Attempting to invoke a Closure more than once causes segfault | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-171455@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=62384&edit=1
ID: 62384
Updated by: felipe@php.net
Reported by: alexander dot carver at gmail dot com
Summary: Attempting to invoke a Closure more than once causes
segfault
-Status: Assigned
+Status: Closed
Type: Bug
Package: Reflection related
Operating System: Debian 6.0
PHP Version: 5.3.14
Assigned To: felipe
Block user comment: N
Private report: N
New Comment:
This bug has been fixed in SVN.
Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
http://snaps.php.net/.
For Windows:
http://windows.php.net/snapshots/
Thank you for the report, and for helping us make PHP better.
Previous Comments:
------------------------------------------------------------------------
[2012-06-22 15:07:40] felipe@php.net
Automatic comment on behalf of felipensp@gmail.com
Revision: http://git.php.net/?p=php-src.git;a=commit;h=b8e946b02eac53f46cbfc8eefb5c91fb5b075c9d
Log: - Fixed bug #62384 (Attempting to invoke a Closure more than once causes segfaul)
------------------------------------------------------------------------
[2012-06-22 06:37:09] alexander dot carver at gmail dot com
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]
------------------------------------------------------------------------
[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