[PHP-users 24605] PHP4.0.6でparentを使うとSegmentation fault

Akira ODA oden924 @ moon.e-com.ne.jp
2005年 2月 20日 (日) 04:09:53 JST


はじめまして。尾田といいます。

PHP4.0.6で末尾に添付したtest.php にアクセスするとApacheのエラーログに
[Sun Feb 20 03:05:33 2005] [notice] child pid 27328 exit signal Segmentation fault (11)
のようなログが吐き出され、Segmentation fault が発生します。
いろいろ試したところ、

1. クラスB の parent::func() を A::func() で置き換える。
2. test.php に require_once('a.php') を追加。

のどちらかの対処を行うことでSegmentation faultが発生しなくなりました。
で、一応解決したのですが、なぜこういうことになるのか理解できません。
原因が分かる方がいたらご教授願えませんでしょうか。
なお、apache-1.3.29 と 1.3.33 で確認しました。

# スタックトレースを取ったら
# #25159 0x00149514 in execute (op_array=0x9e61dbc) at ./zend_execute.c:1544
# のような行が延々と25,000行ほど続いていたので
# PHPのバグのような気もしますが・・・

以下ソースコードです。

a.php
<?php
class A
{
    function func()
    {
        echo "A::func() called\n";
    }
}
?>

b.php
<?php
require_once('a.php');

class B extends A
{
    function func()
    {
        echo "B::func() called\n";
        parent::func();
        // A::func()
    }
}
?>

c.php
<?php
require_once('b.php');

class C extends B
{
    function func()
    {
        echo "C::func() called\n";
        parent::func();
    }
}
?>

test.php
<?php
// require_once('a.php');
require_once('c.php');

header('Content-type: text/plain');
$obj =& new C();
$obj->func();
?>

-- 
尾田 晃 <oden924 @ moon.e-com.ne.jp>




PHP-users メーリングリストの案内