From: Dmitry Stogov Date: Wed, 17 Jan 2018 23:30:07 +0000 (+0300) Subject: Expand SEPARATE_STRING() X-Git-Tag: php-7.3.0alpha1~581 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1613b6a06b032cafdcb3fe13abc0f70c938fe14a;p=php Expand SEPARATE_STRING() --- diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index 359669c4b7..c660988f9c 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -1292,7 +1292,6 @@ static zend_never_inline ZEND_COLD void ZEND_FASTCALL zend_wrong_property_check( static zend_never_inline void zend_assign_to_string_offset(zval *str, zval *dim, zval *value, zval *result EXECUTE_DATA_DC) { - zend_string *old_str; zend_uchar c; size_t string_len; zend_long offset; @@ -1335,17 +1334,15 @@ static zend_never_inline void zend_assign_to_string_offset(zval *str, zval *dim, if ((size_t)offset >= Z_STRLEN_P(str)) { /* Extend string if needed */ zend_long old_len = Z_STRLEN_P(str); - Z_STR_P(str) = zend_string_extend(Z_STR_P(str), offset + 1, 0); - Z_TYPE_INFO_P(str) = IS_STRING_EX; + ZVAL_NEW_STR(str, zend_string_extend(Z_STR_P(str), offset + 1, 0)); memset(Z_STRVAL_P(str) + old_len, ' ', offset - old_len); Z_STRVAL_P(str)[offset+1] = 0; } else if (!Z_REFCOUNTED_P(str)) { - old_str = Z_STR_P(str); - Z_STR_P(str) = zend_string_init(Z_STRVAL_P(str), Z_STRLEN_P(str), 0); - Z_TYPE_INFO_P(str) = IS_STRING_EX; - zend_string_release(old_str); + ZVAL_NEW_STR(str, zend_string_init(Z_STRVAL_P(str), Z_STRLEN_P(str), 0)); + } else if (Z_REFCOUNT_P(str) > 1) { + Z_DELREF_P(str); + ZVAL_NEW_STR(str, zend_string_init(Z_STRVAL_P(str), Z_STRLEN_P(str), 0)); } else { - SEPARATE_STRING(str); zend_string_forget_hash_val(Z_STR_P(str)); }