|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
[2012-06-21 23:10 UTC] alexander dot carver at gmail dot com
-PHP Version: 5.4.4
+PHP Version: 5.3.14
[2012-06-21 23:10 UTC] alexander dot carver at gmail dot com
[2012-06-22 02:19 UTC] Reeze dot xia at gmail dot com
[2012-06-22 06:37 UTC] alexander dot carver at gmail dot com
[2012-06-22 14:46 UTC] felipe@php.net
-Status: Open
+Status: Assigned
-Assigned To:
+Assigned To: felipe
[2012-06-22 15:07 UTC] felipe@php.net
[2012-06-22 15:08 UTC] felipe@php.net
-Status: Assigned
+Status: Closed
[2012-06-22 15:08 UTC] felipe@php.net
[2012-06-22 19:53 UTC] alexander dot carver at gmail dot com
[2014-10-07 23:24 UTC] stas@php.net
[2014-10-07 23:35 UTC] stas@php.net
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sun Oct 26 17:00:01 2025 UTC |
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