From: didier dot peereboom at gmail dot com
Operating system: linux
PHP version: 5.2.9
PHP Bug Type: Reproducible crash
Bug description: preg_replace_callback crashes on static method call that are
NOT defined static
Description:
------------
preg_replace_callback can be passed a method, including static methods.
However if said function is not declared with the keyword static then it
crashes hard. This is NOT the same as the behavior call_user_func which
continues happily no matter what the function has been declared as.
Either call_user_func is wrong in working with incorrect code or
preg_replace_callback is wrong in not working. The hard crash itself can
hardly be intended behavior in either case.
Reproduce code:
---------------
<?php
class testing {
function Main() {
$this->ToBeCalledStatic('Regular');
testing::ToBeCalledStatic('Static call');
$var = "Method passed as array";
$var1 = "Method passed as static string";
$func = array('testing','ToBeCalledStatic');
$func1 = 'testing::ToBeCalledStatic';
call_user_func($func, $var);
preg_replace_callback('/.*/', $func , $var);
call_user_func($func1, $var1);
preg_replace_callback('/.*/', $func1 , $var1);
}
function ToBeCalledStatic($msg) {
echo "Been called with [{$msg}]\n";
}
}
$tmp1 = new testing();
$tmp1->Main();
?>
Expected result:
----------------
Either an error message in both cases that the function should be declared
static OR to work in both cases.
Not to work for call_user_func and fail for preg_replace_callback.
Perhaps with the update to the static notiation option
preg_replace_callback was overlooked?
Actual result:
--------------
Been called with [Regular]
Been called with [Static call]
Been called with [Method passed as array]
Been called with [Array]
Been called with [Array]
Warning: call_user_func(testing::ToBeCalledStatic): First argument is
expected to be a valid callback in /home/didier/test.php on line 12
Call Stack:
0.0002 115008 1. {main}() /home/didier/test.php:0
0.0002 115384 2. testing->Main() /home/didier/test.php:20
0.0004 118432 3. call_user_func() /home/didier/test.php:12
Dump $_SERVER
Dump $_GET
Dump $_POST
Dump $_COOKIE
Dump $_FILES
Dump $_ENV
Dump $_SESSION
Dump $_REQUEST
Warning: preg_replace_callback(): Requires argument 2,
'testing::ToBeCalledStatic', to be a valid callback in
/home/didier/test.php on line 13
Call Stack:
0.0002 115008 1. {main}() /home/didier/test.php:0
0.0002 115384 2. testing->Main() /home/didier/test.php:20
0.0005 119104 3. preg_replace_callback()
/home/didier/test.php:13
--
Edit bug report at http://bugs.php.net/?id=47586&edit=1
--
Try a CVS snapshot (PHP 5.2):
http://bugs.php.net/fix.php?id=47586&r=trysnapshot52
Try a CVS snapshot (PHP 5.3):
http://bugs.php.net/fix.php?id=47586&r=trysnapshot53
Try a CVS snapshot (PHP 6.0):
http://bugs.php.net/fix.php?id=47586&r=trysnapshot60
Fixed in CVS:
http://bugs.php.net/fix.php?id=47586&r=fixedcvs
Fixed in CVS and need be documented:
http://bugs.php.net/fix.php?id=47586&r=needdocs
Fixed in release:
http://bugs.php.net/fix.php?id=47586&r=alreadyfixed
Need backtrace:
http://bugs.php.net/fix.php?id=47586&r=needtrace
Need Reproduce Script:
http://bugs.php.net/fix.php?id=47586&r=needscript
Try newer version:
http://bugs.php.net/fix.php?id=47586&r=oldversion
Not developer issue:
http://bugs.php.net/fix.php?id=47586&r=support
Expected behavior:
http://bugs.php.net/fix.php?id=47586&r=notwrong
Not enough info:
http://bugs.php.net/fix.php?id=47586&r=notenoughinfo
Submitted twice:
http://bugs.php.net/fix.php?id=47586&r=submittedtwice
register_globals:
http://bugs.php.net/fix.php?id=47586&r=globals
PHP 4 support discontinued: http://bugs.php.net/fix.php?id=47586&r=php4
Daylight Savings: http://bugs.php.net/fix.php?id=47586&r=dst
IIS Stability:
http://bugs.php.net/fix.php?id=47586&r=isapi
Install GNU Sed:
http://bugs.php.net/fix.php?id=47586&r=gnused
Floating point limitations:
http://bugs.php.net/fix.php?id=47586&r=float
No Zend Extensions:
http://bugs.php.net/fix.php?id=47586&r=nozend
MySQL Configuration Error:
http://bugs.php.net/fix.php?id=47586&r=mysqlcfg