14 changed files with 19 additions and 160 deletions
-
1NEWS
-
1UPGRADING
-
29Zend/tests/bug45178.phpt
-
10Zend/zend_compile.c
-
3Zend/zend_compile.h
-
2Zend/zend_language_parser.y
-
10Zend/zend_vm_def.h
-
40Zend/zend_vm_execute.h
-
5ext/standard/tests/serialize/bug31402.phpt
-
48tests/classes/new_001.phpt
-
7tests/lang/bug20175.phpt
-
6tests/lang/bug22231.phpt
-
4tests/lang/bug22510.phpt
-
13tests/lang/engine_assignExecutionOrder_007.phpt
@ -1,29 +0,0 @@ |
|||
--TEST-- |
|||
Bug #45178 memory corruption on assignment result of "new" by reference |
|||
--FILE-- |
|||
<?php |
|||
class Foo { |
|||
function __construct() { |
|||
$this->error = array($this,$this); |
|||
} |
|||
} |
|||
$a =& new Foo(); |
|||
|
|||
class Bar { |
|||
function __construct() { |
|||
$this->_rme2 = $this; |
|||
} |
|||
} |
|||
|
|||
$b =& new Bar(); |
|||
$b->_rme2 = 0; |
|||
var_dump($b); |
|||
?> |
|||
--EXPECTF-- |
|||
Deprecated: Assigning the return value of new by reference is deprecated in %sbug45178.php on line 7 |
|||
|
|||
Deprecated: Assigning the return value of new by reference is deprecated in %sbug45178.php on line 15 |
|||
object(Bar)#%d (1) { |
|||
["_rme2"]=> |
|||
int(0) |
|||
} |
|||
@ -1,48 +0,0 @@ |
|||
--TEST-- |
|||
Confirm difference between assigning new directly and by reference. |
|||
--INI-- |
|||
error_reporting=E_ALL | E_DEPRECATED |
|||
--FILE-- |
|||
<?php |
|||
echo "Compile-time strict error message should precede this.\n"; |
|||
|
|||
class Inc |
|||
{ |
|||
private static $counter = 0; |
|||
function __construct() |
|||
{ |
|||
$this->id = ++Inc::$counter; |
|||
} |
|||
} |
|||
|
|||
$f = new Inc(); |
|||
$k =& $f; |
|||
echo "\$f initially points to the first object:\n"; |
|||
var_dump($f); |
|||
|
|||
echo "Assigning new object directly to \$k affects \$f:\n"; |
|||
$k = new Inc(); |
|||
var_dump($f); |
|||
|
|||
echo "Assigning new object by ref to \$k removes it from \$f's reference set, so \$f is unchanged:\n"; |
|||
$k =& new Inc(); |
|||
var_dump($f); |
|||
?> |
|||
--EXPECTF-- |
|||
Deprecated: Assigning the return value of new by reference is deprecated in %s on line 23 |
|||
Compile-time strict error message should precede this. |
|||
$f initially points to the first object: |
|||
object(Inc)#%d (1) { |
|||
["id"]=> |
|||
int(1) |
|||
} |
|||
Assigning new object directly to $k affects $f: |
|||
object(Inc)#%d (1) { |
|||
["id"]=> |
|||
int(2) |
|||
} |
|||
Assigning new object by ref to $k removes it from $f's reference set, so $f is unchanged: |
|||
object(Inc)#%d (1) { |
|||
["id"]=> |
|||
int(2) |
|||
} |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue