2003-03-04 19:52:22 +00:00
|
|
|
--TEST--
|
|
|
|
Bug #22510 (segfault among complex references)
|
2005-04-29 01:18:41 +00:00
|
|
|
--INI--
|
|
|
|
error_reporting=4095
|
2003-03-04 19:52:22 +00:00
|
|
|
--FILE--
|
|
|
|
<?php
|
|
|
|
class foo
|
|
|
|
{
|
2003-11-30 13:57:20 +00:00
|
|
|
public $list = array();
|
2003-03-04 19:52:22 +00:00
|
|
|
|
|
|
|
function finalize() {
|
|
|
|
print __CLASS__."::".__FUNCTION__."\n";
|
|
|
|
$cl = &$this->list;
|
|
|
|
}
|
|
|
|
|
|
|
|
function &method1() {
|
|
|
|
print __CLASS__."::".__FUNCTION__."\n";
|
2003-07-02 15:47:24 +00:00
|
|
|
return @$this->foo;
|
2003-03-04 19:52:22 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function &method2() {
|
|
|
|
print __CLASS__."::".__FUNCTION__."\n";
|
|
|
|
return $this->foo;
|
|
|
|
}
|
|
|
|
|
|
|
|
function method3() {
|
|
|
|
print __CLASS__."::".__FUNCTION__."\n";
|
2003-07-02 15:47:24 +00:00
|
|
|
return @$this->foo;
|
2003-03-04 19:52:22 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
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";
|
|
|
|
?>
|
2003-07-02 15:47:24 +00:00
|
|
|
--EXPECTF--
|
2004-02-10 15:20:51 +00:00
|
|
|
Strict Standards: Assigning the return value of new by reference is deprecated in %s on line %d
|
2003-03-04 19:52:22 +00:00
|
|
|
ok1
|
|
|
|
bar::run1
|
|
|
|
foo::method1
|
2003-07-02 15:47:24 +00:00
|
|
|
|
2005-07-12 11:20:05 +00:00
|
|
|
Notice: Only variable references should be returned by reference in %s on line %d
|
2003-12-17 17:25:00 +00:00
|
|
|
foo::method1
|
|
|
|
|
2005-07-12 11:20:05 +00:00
|
|
|
Notice: Only variable references should be returned by reference in %s on line %d
|
2003-12-17 17:25:00 +00:00
|
|
|
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
|
|
|
|
|
2005-07-12 11:20:05 +00:00
|
|
|
Notice: Only variable references should be returned by reference in %s on line %d
|
2003-12-17 17:25:00 +00:00
|
|
|
foo::method1
|
|
|
|
|
2005-07-12 11:20:05 +00:00
|
|
|
Notice: Only variable references should be returned by reference in %s on line %d
|
2003-12-17 17:25:00 +00:00
|
|
|
foo::finalize
|
|
|
|
I'm alive!
|