@@ -1999,7 +1999,7 @@ ZEND_API void ZEND_FASTCALL zend_hash_merge(HashTable *target, HashTable *source
1999
1999
{
2000
2000
uint32_t idx ;
2001
2001
Bucket * p ;
2002
- zval * t ;
2002
+ zval * t , * s ;
2003
2003
2004
2004
IS_CONSISTENT (source );
2005
2005
IS_CONSISTENT (target );
@@ -2008,18 +2008,20 @@ ZEND_API void ZEND_FASTCALL zend_hash_merge(HashTable *target, HashTable *source
2008
2008
if (overwrite ) {
2009
2009
for (idx = 0 ; idx < source -> nNumUsed ; idx ++ ) {
2010
2010
p = source -> arData + idx ;
2011
- if (UNEXPECTED (Z_TYPE (p -> val ) == IS_UNDEF )) continue ;
2012
- if (UNEXPECTED (Z_TYPE (p -> val ) == IS_INDIRECT ) &&
2013
- UNEXPECTED (Z_TYPE_P (Z_INDIRECT (p -> val )) == IS_UNDEF )) {
2014
- continue ;
2011
+ s = & p -> val ;
2012
+ if (UNEXPECTED (Z_TYPE_P (s ) == IS_INDIRECT )) {
2013
+ s = Z_INDIRECT_P (s );
2014
+ }
2015
+ if (UNEXPECTED (Z_TYPE_P (s ) == IS_UNDEF )) {
2016
+ continue ;
2015
2017
}
2016
2018
if (p -> key ) {
2017
- t = _zend_hash_add_or_update_i (target , p -> key , & p -> val , HASH_UPDATE | HASH_UPDATE_INDIRECT );
2019
+ t = _zend_hash_add_or_update_i (target , p -> key , s , HASH_UPDATE | HASH_UPDATE_INDIRECT );
2018
2020
if (pCopyConstructor ) {
2019
2021
pCopyConstructor (t );
2020
2022
}
2021
2023
} else {
2022
- t = zend_hash_index_update (target , p -> h , & p -> val );
2024
+ t = zend_hash_index_update (target , p -> h , s );
2023
2025
if (pCopyConstructor ) {
2024
2026
pCopyConstructor (t );
2025
2027
}
@@ -2028,18 +2030,20 @@ ZEND_API void ZEND_FASTCALL zend_hash_merge(HashTable *target, HashTable *source
2028
2030
} else {
2029
2031
for (idx = 0 ; idx < source -> nNumUsed ; idx ++ ) {
2030
2032
p = source -> arData + idx ;
2031
- if (UNEXPECTED (Z_TYPE (p -> val ) == IS_UNDEF )) continue ;
2032
- if (UNEXPECTED (Z_TYPE (p -> val ) == IS_INDIRECT ) &&
2033
- UNEXPECTED (Z_TYPE_P (Z_INDIRECT (p -> val )) == IS_UNDEF )) {
2034
- continue ;
2033
+ s = & p -> val ;
2034
+ if (UNEXPECTED (Z_TYPE_P (s ) == IS_INDIRECT )) {
2035
+ s = Z_INDIRECT_P (s );
2036
+ }
2037
+ if (UNEXPECTED (Z_TYPE_P (s ) == IS_UNDEF )) {
2038
+ continue ;
2035
2039
}
2036
2040
if (p -> key ) {
2037
- t = _zend_hash_add_or_update_i (target , p -> key , & p -> val , HASH_ADD | HASH_UPDATE_INDIRECT );
2041
+ t = _zend_hash_add_or_update_i (target , p -> key , s , HASH_ADD | HASH_UPDATE_INDIRECT );
2038
2042
if (t && pCopyConstructor ) {
2039
2043
pCopyConstructor (t );
2040
2044
}
2041
2045
} else {
2042
- t = zend_hash_index_add (target , p -> h , & p -> val );
2046
+ t = zend_hash_index_add (target , p -> h , s );
2043
2047
if (t && pCopyConstructor ) {
2044
2048
pCopyConstructor (t );
2045
2049
}
0 commit comments