mirror of
https://github.com/php/php-src.git
synced 2024-11-24 10:24:11 +08:00
Fixed bug #34137 (assigning array element by reference causes binary mess)
This commit is contained in:
parent
7fda1750f1
commit
4f161fe289
2
NEWS
2
NEWS
@ -34,6 +34,8 @@ PHP NEWS
|
||||
- Fixed bug #34156 (memory usage remains elevated after memory limit is
|
||||
reached). (Ilia)
|
||||
- Fixed bug #34148 (+,- and . not supported as parts of scheme). (Ilia)
|
||||
- Fixed bug #34137 (assigning array element by reference causes binary mess).
|
||||
(Dmitry)
|
||||
- Fixed bug #34103 (line numbering not maintained in dom document). (Rob)
|
||||
- Fixed bug #34078 (Reflection API problems in methods with boolean or
|
||||
null default values). (Tony)
|
||||
|
10
Zend/tests/bug34137.phpt
Executable file
10
Zend/tests/bug34137.phpt
Executable file
@ -0,0 +1,10 @@
|
||||
--TEST--
|
||||
Bug #34137 (assigning array element by reference causes binary mess)
|
||||
--FILE--
|
||||
<?php
|
||||
$arr1 = array('a1' => array('alfa' => 'ok'));
|
||||
$arr1 =& $arr1['a1'];
|
||||
echo '-'.$arr1['alfa']."-\n";
|
||||
?>
|
||||
--EXPECT--
|
||||
-ok-
|
@ -392,12 +392,6 @@ static void zend_assign_to_variable_reference(zval **variable_ptr_ptr, zval **va
|
||||
if (variable_ptr == EG(error_zval_ptr) || value_ptr==EG(error_zval_ptr)) {
|
||||
variable_ptr_ptr = &EG(uninitialized_zval_ptr);
|
||||
} else if (variable_ptr != value_ptr) {
|
||||
variable_ptr->refcount--;
|
||||
if (variable_ptr->refcount==0) {
|
||||
zendi_zval_dtor(*variable_ptr);
|
||||
FREE_ZVAL(variable_ptr);
|
||||
}
|
||||
|
||||
if (!PZVAL_IS_REF(value_ptr)) {
|
||||
/* break it away */
|
||||
value_ptr->refcount--;
|
||||
@ -413,6 +407,12 @@ static void zend_assign_to_variable_reference(zval **variable_ptr_ptr, zval **va
|
||||
|
||||
*variable_ptr_ptr = value_ptr;
|
||||
value_ptr->refcount++;
|
||||
|
||||
variable_ptr->refcount--;
|
||||
if (variable_ptr->refcount==0) {
|
||||
zendi_zval_dtor(*variable_ptr);
|
||||
FREE_ZVAL(variable_ptr);
|
||||
}
|
||||
} else if (!variable_ptr->is_ref) {
|
||||
if (variable_ptr_ptr == value_ptr_ptr) {
|
||||
SEPARATE_ZVAL(variable_ptr_ptr);
|
||||
|
Loading…
Reference in New Issue
Block a user