From 1613b6a06b032cafdcb3fe13abc0f70c938fe14a Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Thu, 18 Jan 2018 02:30:07 +0300 Subject: [PATCH] Expand SEPARATE_STRING() --- Zend/zend_execute.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) 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)); } -- 2.50.1