ID:               28687
 User updated by:  equake at epmail dot com dot br
 Reported By:      equake at epmail dot com dot br
 Status:           Bogus
 Bug Type:         Reproducible crash
 Operating System: Linux 2.4.24
 PHP Version:      PHP5-200406081230
 New Comment:

So PHP shouldn't show a "decent" error message in this situation?

I think that it's not so important when you have a static script that 
you're working on a text editor, but it can be a major problem where
you are generating php code "automagically" from a XML + XSLT, for
example. Sometimes my (erroneous) generated script dies, without *any*
message :/


Previous Comments:
------------------------------------------------------------------------

[2004-06-08 16:10:55] [EMAIL PROTECTED]

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.

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

[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

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

The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
    http://bugs.php.net/28687

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

Reply via email to