mirror of
https://github.com/php/php-src.git
synced 2026-04-05 15:12:39 +02:00
Merge branch 'PHP-8.1'
This commit is contained in:
3
NEWS
3
NEWS
@@ -2,6 +2,9 @@ PHP NEWS
|
||||
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||
?? ??? ????, PHP 8.2.0alpha2
|
||||
|
||||
- Core:
|
||||
. Fixed bug GH-8655 (Casting an object to array does not unwrap refcount=1
|
||||
references). (Nicolas Grekas)
|
||||
|
||||
09 Jun 2022, PHP 8.2.0alpha1
|
||||
|
||||
|
||||
29
Zend/tests/bugGH-8655.phpt
Normal file
29
Zend/tests/bugGH-8655.phpt
Normal file
@@ -0,0 +1,29 @@
|
||||
--TEST--
|
||||
Bug GH-8655 (zval reference is not released when targetting a declared property)
|
||||
--FILE--
|
||||
<?php
|
||||
class Foo
|
||||
{
|
||||
public $foo;
|
||||
}
|
||||
|
||||
function hydrate($properties, $object)
|
||||
{
|
||||
foreach ($properties as $name => &$value) {
|
||||
$object->$name = &$value;
|
||||
}
|
||||
};
|
||||
|
||||
$object = new Foo;
|
||||
|
||||
hydrate(['foo' => 123], $object);
|
||||
|
||||
$arrayCast = (array) $object;
|
||||
|
||||
$object->foo = 234;
|
||||
var_dump(ReflectionReference::fromArrayElement($arrayCast, 'foo'));
|
||||
echo $arrayCast['foo'];
|
||||
?>
|
||||
--EXPECT--
|
||||
NULL
|
||||
123
|
||||
@@ -111,6 +111,10 @@ ZEND_API HashTable *zend_std_build_object_properties_array(zend_object *zobj) /*
|
||||
continue;
|
||||
}
|
||||
|
||||
if (Z_ISREF_P(prop) && Z_REFCOUNT_P(prop) == 1) {
|
||||
prop = Z_REFVAL_P(prop);
|
||||
}
|
||||
|
||||
Z_TRY_ADDREF_P(prop);
|
||||
_zend_hash_append(ht, prop_info->name, prop);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user