diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index ef0bff49d46..ca41d209f6d 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -1602,6 +1602,9 @@ static zend_never_inline void zend_assign_to_string_offset(zval *str, zval *dim, } else { s = zend_string_init(Z_STRVAL_P(str), Z_STRLEN_P(str), 0); ZSTR_H(s) = ZSTR_H(Z_STR_P(str)); + if (Z_REFCOUNTED_P(str)) { + zend_string_release_ex(Z_STR_P(str), 0); + } ZVAL_NEW_STR(str, s); } diff --git a/ext/opcache/jit/zend_jit_helpers.c b/ext/opcache/jit/zend_jit_helpers.c index 5dcadfa2ca7..91b2db5177b 100644 --- a/ext/opcache/jit/zend_jit_helpers.c +++ b/ext/opcache/jit/zend_jit_helpers.c @@ -947,6 +947,9 @@ static zend_never_inline void zend_assign_to_string_offset(zval *str, zval *dim, } else { s = zend_string_init(Z_STRVAL_P(str), Z_STRLEN_P(str), 0); ZSTR_H(s) = ZSTR_H(Z_STR_P(str)); + if (Z_REFCOUNTED_P(str)) { + zend_string_release_ex(Z_STR_P(str), 0); + } ZVAL_NEW_STR(str, s); }