From: Nikita Popov Date: Fri, 10 Jul 2020 12:07:59 +0000 (+0200) Subject: Merge branch 'PHP-7.4' X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=12214e1d4680a7319364ffaf129062e1055824c5;p=php Merge branch 'PHP-7.4' * PHP-7.4: Fixed bug #79817 --- 12214e1d4680a7319364ffaf129062e1055824c5 diff --cc ext/standard/string.c index 5650164bf6,ff9f2a849d..8943a37bed --- a/ext/standard/string.c +++ b/ext/standard/string.c @@@ -2364,7 -2598,7 +2364,7 @@@ PHP_FUNCTION(substr_replace from_idx = len_idx = repl_idx = 0; - ZEND_HASH_FOREACH_KEY_VAL(str_ht, num_index, str_index, tmp_str) { - ZEND_HASH_FOREACH_KEY_VAL_IND(Z_ARRVAL_P(str), num_index, str_index, tmp_str) { ++ ZEND_HASH_FOREACH_KEY_VAL_IND(str_ht, num_index, str_index, tmp_str) { zend_string *tmp_orig_str; zend_string *orig_str = zval_get_tmp_string(tmp_str, &tmp_orig_str); @@@ -3238,7 -3492,7 +3238,7 @@@ PHP_FUNCTION(strtr zend_string *str_key, *tmp_str, *replace, *tmp_replace; zval *entry; - ZEND_HASH_FOREACH_KEY_VAL(from_ht, num_key, str_key, entry) { - ZEND_HASH_FOREACH_KEY_VAL_IND(pats, num_key, str_key, entry) { ++ ZEND_HASH_FOREACH_KEY_VAL_IND(from_ht, num_key, str_key, entry) { tmp_str = NULL; if (UNEXPECTED(!str_key)) { str_key = tmp_str = zend_long_to_str(num_key); @@@ -4282,13 -4555,13 +4282,13 @@@ static void php_str_replace_common(INTE /* For each subject entry, convert it to string, then perform replacement and add the result to the return_value array. */ - ZEND_HASH_FOREACH_KEY_VAL(subject_ht, num_key, string_key, subject_entry) { - ZEND_HASH_FOREACH_KEY_VAL_IND(Z_ARRVAL_P(subject), num_key, string_key, subject_entry) { ++ ZEND_HASH_FOREACH_KEY_VAL_IND(subject_ht, num_key, string_key, subject_entry) { + zend_string *tmp_subject_str; ZVAL_DEREF(subject_entry); - if (Z_TYPE_P(subject_entry) != IS_ARRAY && Z_TYPE_P(subject_entry) != IS_OBJECT) { - count += php_str_replace_in_subject(search, replace, subject_entry, &result, case_sensitivity); - } else { - ZVAL_COPY(&result, subject_entry); - } + subject_str = zval_get_tmp_string(subject_entry, &tmp_subject_str); + count += php_str_replace_in_subject(search, replace, subject_str, &result, case_sensitivity); + zend_tmp_string_release(tmp_subject_str); + /* Add to return array */ if (string_key) { zend_hash_add_new(Z_ARRVAL_P(return_value), string_key, &result);