diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index 52d80ba61a1..d86f037a658 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -1676,6 +1676,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 dad960a83e2..f55fb6ac147 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); }