@@ -1454,7 +1454,7 @@ ZEND_VM_C_LABEL(fetch_this):
1454
1454
1455
1455
ZEND_ASSERT (retval != NULL );
1456
1456
if (type == BP_VAR_R || type == BP_VAR_IS ) {
1457
- ZVAL_COPY_UNREF (EX_VAR (opline -> result .var ), retval );
1457
+ ZVAL_COPY_DEREF (EX_VAR (opline -> result .var ), retval );
1458
1458
} else {
1459
1459
ZVAL_INDIRECT (EX_VAR (opline -> result .var ), retval );
1460
1460
}
@@ -1580,7 +1580,7 @@ ZEND_VM_HELPER(zend_fetch_static_prop_helper, CONST|TMPVAR|CV, UNUSED|CONST|VAR,
1580
1580
}
1581
1581
1582
1582
if (type == BP_VAR_R || type == BP_VAR_IS ) {
1583
- ZVAL_COPY_UNREF (EX_VAR (opline -> result .var ), retval );
1583
+ ZVAL_COPY_DEREF (EX_VAR (opline -> result .var ), retval );
1584
1584
} else {
1585
1585
ZVAL_INDIRECT (EX_VAR (opline -> result .var ), retval );
1586
1586
}
@@ -1634,7 +1634,7 @@ ZEND_VM_COLD_CONSTCONST_HANDLER(81, ZEND_FETCH_DIM_R, CONST|TMPVAR|CV, CONST|TMP
1634
1634
ZEND_VM_C_LABEL (fetch_dim_r_array ):
1635
1635
value = zend_fetch_dimension_address_inner (Z_ARRVAL_P (container ), dim , OP2_TYPE , BP_VAR_R EXECUTE_DATA_CC );
1636
1636
result = EX_VAR (opline -> result .var );
1637
- ZVAL_COPY_UNREF (result , value );
1637
+ ZVAL_COPY_DEREF (result , value );
1638
1638
} else if (EXPECTED (Z_TYPE_P (container ) == IS_REFERENCE )) {
1639
1639
container = Z_REFVAL_P (container );
1640
1640
if (EXPECTED (Z_TYPE_P (container ) == IS_ARRAY )) {
@@ -1809,7 +1809,7 @@ ZEND_VM_HOT_OBJ_HANDLER(82, ZEND_FETCH_OBJ_R, CONST|TMPVAR|UNUSED|THIS|CV, CONST
1809
1809
if (EXPECTED (IS_VALID_PROPERTY_OFFSET (prop_offset ))) {
1810
1810
retval = OBJ_PROP (zobj , prop_offset );
1811
1811
if (EXPECTED (Z_TYPE_INFO_P (retval ) != IS_UNDEF )) {
1812
- ZVAL_COPY_UNREF (EX_VAR (opline -> result .var ), retval );
1812
+ ZVAL_COPY_DEREF (EX_VAR (opline -> result .var ), retval );
1813
1813
break ;
1814
1814
}
1815
1815
} else if (EXPECTED (zobj -> properties != NULL )) {
@@ -1824,7 +1824,7 @@ ZEND_VM_HOT_OBJ_HANDLER(82, ZEND_FETCH_OBJ_R, CONST|TMPVAR|UNUSED|THIS|CV, CONST
1824
1824
(EXPECTED (p -> h == ZSTR_H (Z_STR_P (offset ))) &&
1825
1825
EXPECTED (p -> key != NULL ) &&
1826
1826
EXPECTED (zend_string_equal_content (p -> key , Z_STR_P (offset )))))) {
1827
- ZVAL_COPY_UNREF (EX_VAR (opline -> result .var ), & p -> val );
1827
+ ZVAL_COPY_DEREF (EX_VAR (opline -> result .var ), & p -> val );
1828
1828
break ;
1829
1829
}
1830
1830
}
@@ -1834,7 +1834,7 @@ ZEND_VM_HOT_OBJ_HANDLER(82, ZEND_FETCH_OBJ_R, CONST|TMPVAR|UNUSED|THIS|CV, CONST
1834
1834
if (EXPECTED (retval )) {
1835
1835
uintptr_t idx = (char * )retval - (char * )zobj -> properties -> arData ;
1836
1836
CACHE_PTR_EX (cache_slot + 1 , (void * )ZEND_ENCODE_DYN_PROP_OFFSET (idx ));
1837
- ZVAL_COPY_UNREF (EX_VAR (opline -> result .var ), retval );
1837
+ ZVAL_COPY_DEREF (EX_VAR (opline -> result .var ), retval );
1838
1838
break ;
1839
1839
}
1840
1840
}
@@ -1851,7 +1851,9 @@ ZEND_VM_C_LABEL(fetch_obj_r_no_object):
1851
1851
retval = zobj -> handlers -> read_property (container , offset , BP_VAR_R , cache_slot , EX_VAR (opline -> result .var ));
1852
1852
1853
1853
if (retval != EX_VAR (opline -> result .var )) {
1854
- ZVAL_COPY_UNREF (EX_VAR (opline -> result .var ), retval );
1854
+ ZVAL_COPY_DEREF (EX_VAR (opline -> result .var ), retval );
1855
+ } else if (UNEXPECTED (Z_ISREF_P (retval ))) {
1856
+ zend_unwrap_reference (retval );
1855
1857
}
1856
1858
}
1857
1859
} while (0 );
@@ -8654,7 +8656,7 @@ ZEND_VM_C_LABEL(fetch_dim_r_index_array):
8654
8656
}
8655
8657
ht = Z_ARRVAL_P (container );
8656
8658
ZEND_HASH_INDEX_FIND (ht , offset , value , ZEND_VM_C_LABEL (fetch_dim_r_index_undef ));
8657
- ZVAL_COPY_UNREF (EX_VAR (opline -> result .var ), value );
8659
+ ZVAL_COPY_DEREF (EX_VAR (opline -> result .var ), value );
8658
8660
if (OP1_TYPE & (IS_TMP_VAR |IS_VAR )) {
8659
8661
SAVE_OPLINE ();
8660
8662
FREE_OP1 ();
0 commit comments