]> granicus.if.org Git - php/commitdiff
Merge branch 'PHP-7.4'
authorNikita Popov <nikita.ppv@gmail.com>
Fri, 10 Jul 2020 12:07:59 +0000 (14:07 +0200)
committerNikita Popov <nikita.ppv@gmail.com>
Fri, 10 Jul 2020 12:07:59 +0000 (14:07 +0200)
* PHP-7.4:
  Fixed bug #79817

1  2 
ext/standard/string.c

index 5650164bf6fded0389276b0480782e38f5b4b87f,ff9f2a849d6af974768c9e8757beefe0b5fc34b7..8943a37bed550c02a065a9e296f6dc8c3d6f5d8d
@@@ -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);