ID: 28687
Updated by: [EMAIL PROTECTED]
Reported By: equake at epmail dot com dot br
-Status: Open
+Status: Bogus
Bug Type: Reproducible crash
Operating System: Linux 2.4.24
PHP Version: PHP5-200406081230
New Comment:
This behaviour is caused by endless loop:
non-ex method -> __call -> non-ex method -> __call -> .. etc.
Try to call this func:
function foo() {
return foo();
}
and you'll get the same result.
not a bug, though.
Previous Comments:
------------------------------------------------------------------------
[2004-06-08 15:58:41] equake at epmail dot com dot br
hmm
the problem seems to happen ONLY when I try to return a inexistent
method from the __call method
class test {
function __construct() {
echo ("script started at ".time()."<br>\n");
}
function __call($method, $params) {
if ($method == "foo") {
return $this->foo_method();
} else {
return $this->buggy();
}
}
function foo_method() {
return "TESTE DE MENSAGEM";
}
}
$test = new test();
$var = $test->foo(); // works
$var2 = $test->foo2(); // segmentation fault
------------------------------------------------------------------------
[2004-06-08 15:47:29] equake at epmail dot com dot br
the (correct) small script that throws the error:
abstract class test {
function __call($method, $params) {
if (is_callable(array($this, $method))) {
echo ("ok<br>");
return $this->{$method}($params); // [error_log] [notice]
child pid
# exit signal Segmentation fault (11)
}
}
}
class test2 extends test {
function __construct() {
echo ("hi, im test2 at ". time () ." seconds since 01/01/1970
<br>");
}
function bla() {
echo ('haha');
}
function x() {
}
}
$x = new test2();
$x->xjhjk(); // any inexistent method name
------------------------------------------------------------------------
[2004-06-08 15:42:35] equake at epmail dot com dot br
I'm still having problems with the CVS-PHP5-200406081230
[Tue Jun 08 10:43:03 2004] [notice] child pid 2711 exit signal
Segmentation fault (11)
But I think that the problem only happen when I try to return a
inexistent method inside a abstract class. The following code works
well (no segmentation fault):
class test {
function call($method, $params=null) {
if (is_callable(array($this, $method))) {
return $this->{$method}($params);
} else {
echo ("not found");
}
}
function message() {
return "TESTE DE MENSAGEM";
}
}
$test = new test();
$var = $test->call("not_exist");
echo $var;
------------------------------------------------------------------------
[2004-06-08 09:46:35] [EMAIL PROTECTED]
Please try using this CVS snapshot:
http://snaps.php.net/php5-latest.tar.gz
For Windows:
http://snaps.php.net/win32/php5-win32-latest.zip
------------------------------------------------------------------------
[2004-06-07 23:40:09] equake at epmail dot com dot br
Description:
------------
I got a Segmentation Fault every time that I try to return some method
that does not exists.
Reproduce code:
---------------
abstract class test {
function __call($method, $params) {
if (is_callable(array($this, $method))) {
echo ("ok<br>");
return $this->{$method}($params); // abstract class test {
function __call($method, $params) {
if (is_callable(array($this, $method))) {
echo ("ok<br>");
return $this->{$method}($params); // [error_log] [notice]
child pid
# exit signal Segmentation fault (11)
}
}
}
class test2 extends test {
function __construct() {
echo ("hi, im test2 at ". time () ." seconds since 01/01/1970
<br>");
}
function bla() {
echo ('haha');
}
}
$x = new test2();
$x->bla_inexistent(); // any inexistent method name
}
}
}
class test2 extends test {
function __construct() {
echo ("hi, im test2 at ". time () ." seconds since 01/01/1970
<br>");
}
function bla() {
echo ('haha');
}
}
$x = new test2();
$x->bla_inexistent(); // any inexistent method name
Expected result:
----------------
hi, im test2 at 1086644752 seconds since 01/01/1970
Actual result:
--------------
"[error_log] [notice] child pid # exit signal Segmentation fault (11)"
on the apache Error Log
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=28687&edit=1