moriyoshi               Tue Mar  4 14:52:22 2003 EDT

  Added files:                 
    /php4/tests/lang    bug22510.phpt 
  Log:
  Added a test case for bug #22510
  
  

Index: php4/tests/lang/bug22510.phpt
+++ php4/tests/lang/bug22510.phpt
--TEST--
Bug #22510 (segfault among complex references)
--FILE--
<?php
class foo 
{
        var $list = array();

        function finalize() {
                print __CLASS__."::".__FUNCTION__."\n";
                $cl = &$this->list;
        }

        function &method1() {
                print __CLASS__."::".__FUNCTION__."\n";
                return @$this->foo;
        }

        function &method2() {
                print __CLASS__."::".__FUNCTION__."\n";
                return $this->foo;
        }

        function method3() {
                print __CLASS__."::".__FUNCTION__."\n";
                return @$this->foo;
        }
}

class bar 
{
        function run1() {
                print __CLASS__."::".__FUNCTION__."\n";
                $this->instance = new foo();
                $this->instance->method1($this);
                $this->instance->method1($this);
        }

        function run2() {
                print __CLASS__."::".__FUNCTION__."\n";
                $this->instance = new foo();
                $this->instance->method2($this);
                $this->instance->method2($this);
        }

        function run3() {
                print __CLASS__."::".__FUNCTION__."\n";
                $this->instance = new foo();
                $this->instance->method3($this);
                $this->instance->method3($this);
        }
}

function ouch(&$bar) {
        print __FUNCTION__."\n";
        @$a = $a;
        $bar->run1();
}

function ok1(&$bar) {
        print __FUNCTION__."\n";
        $bar->run1();
}

function ok2(&$bar) {
        print __FUNCTION__."\n";
        @$a = $a; 
        $bar->run2();
}

function ok3(&$bar) {
        print __FUNCTION__."\n";
        @$a = $a;
        $bar->run3();
}

$bar = &new bar();
ok1($bar);
$bar->instance->finalize();
print "done!\n";
ok2($bar);
$bar->instance->finalize();
print "done!\n";
ok3($bar);
$bar->instance->finalize();
print "done!\n";
ouch($bar);
$bar->instance->finalize();
print "I'm alive!\n";
?>
--EXPECT--
ok1
bar::run1
foo::method1
foo::method1
foo::finalize
done!
ok2
bar::run2
foo::method2
foo::method2
foo::finalize
done!
ok3
bar::run3
foo::method3
foo::method3
foo::finalize
done!
ouch
bar::run1
foo::method1
foo::method1
foo::finalize
I'm alive!



-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to