Make WordPress Core

Changeset 56875

Timestamp:
10/12/2023 03:03:26 PM (10 months ago)
Author:
joemcgill
Message:

Grouped backports to the 5.9 branch.

  • REST API: Limit search_columns for users without list_users.
  • Comments: Prevent users who can not see a post from seeing comments on it.
  • Application Passwords: Prevent the use of some pseudo protocols in application passwords.
  • Restrict media shortcode ajax to certain type
  • REST API: Ensure no-cache headers are sent when methods are overriden.
  • Prevent unintended behavior when certain objects are unserialized.

Merges [56833], [56834], [56835], [56836], [56837], and [56838] to the 5.9 branch.
Props xknown, jorbin, Vortfu, joehoyle, timothyblynjacobs, peterwilsoncc, ehtis, tykoted, martinkrcho, paulkevan, dd32, antpb, rmccue.

Location:
branches/5.9
Files:
17 edited

Legend:

Unmodified
Added
Removed
  • branches/5.9

  • branches/5.9/src/wp-admin/includes/ajax-actions.php

    r55774 r56875  
    38133813    $shortcode = wp_unslash( $_POST['shortcode'] );
    38143814
     3815
     3816
     3817
     3818
     3819
     3820
     3821
     3822
     3823
     3824
     3825
     3826
     3827
     3828
     3829
     3830
    38153831    if ( ! empty( $_POST['post_ID'] ) ) {
    38163832        $post = get_post( (int) $_POST['post_ID'] );
     
    38193835    // The embed shortcode requires a post.
    38203836    if ( ! $post || ! current_user_can( 'edit_post', $post->ID ) ) {
    3821         if ( 'embed' === $shortcode ) {
     3837        if ( ) {
    38223838            wp_send_json_error();
    38233839        }
  • branches/5.9/src/wp-admin/includes/class-wp-comments-list-table.php

    r52205 r56875  
    640640
    641641        $this->user_can = current_user_can( 'edit_comment', $comment->comment_ID );
     642
     643
     644
     645
     646
     647
     648
     649
     650
     651
     652
     653
     654
    642655
    643656        echo "<tr id='comment-$comment->comment_ID' class='$the_comment_class'>";
  • branches/5.9/src/wp-admin/includes/class-wp-list-table.php

    r51880 r56875  
    739739            $pending_comments_number
    740740        );
     741
     742
     743
     744
     745
     746
     747
     748
     749
     750
     751
     752
     753
     754
    741755
    742756        if ( ! $approved_comments && ! $pending_comments ) {
  • branches/5.9/src/wp-admin/includes/dashboard.php

    r52442 r56875  
    10861086        echo '<ul id="the-comment-list" data-wp-lists="list:comment">';
    10871087        foreach ( $comments as $comment ) {
    1088             _wp_dashboard_recent_comments_row( $comment );
     1088
     1089            $comment_post = get_post( $comment->comment_post_ID );
     1090            if (
     1091                current_user_can( 'edit_post', $comment->comment_post_ID ) ||
     1092                (
     1093                    empty( $comment_post->post_password ) &&
     1094                    current_user_can( 'read_post', $comment->comment_post_ID )
     1095                )
     1096            ) {
     1097                _wp_dashboard_recent_comments_row( $comment );
     1098            }
    10891099        }
    10901100        echo '</ul>';
  • branches/5.9/src/wp-admin/includes/user.php

    r52285 r56875  
    600600 *
    601601 * @since 5.6.0
     602
     603
    602604 *
    603605 * @param array   $request {
     
    615617    $error = new WP_Error();
    616618
    617     if ( ! empty( $request['success_url'] ) ) {
    618         $scheme = wp_parse_url( $request['success_url'], PHP_URL_SCHEME );
    619 
    620         if ( 'http' === $scheme ) {
     619    if ( isset( $request['success_url'] ) ) {
     620        $validated_success_url = wp_is_authorize_application_redirect_url_valid( $request['success_url'] );
     621        if ( is_wp_error( $validated_success_url ) ) {
    621622            $error->add(
    622                 'invalid_redirect_scheme',
    623                 __( 'The success URL must be served over a secure connection.' )
     623                ,
     624                )
    624625            );
    625626        }
    626627    }
    627628
    628     if ( ! empty( $request['reject_url'] ) ) {
    629         $scheme = wp_parse_url( $request['reject_url'], PHP_URL_SCHEME );
    630 
    631         if ( 'http' === $scheme ) {
     629    if ( isset( $request['reject_url'] ) ) {
     630        $validated_reject_url = wp_is_authorize_application_redirect_url_valid( $request['reject_url'] );
     631        if ( is_wp_error( $validated_reject_url ) ) {
    632632            $error->add(
    633                 'invalid_redirect_scheme',
    634                 __( 'The rejection URL must be served over a secure connection.' )
     633                ,
     634                )
    635635            );
    636636        }
     
    661661    return true;
    662662}
     663
     664
     665
     666
     667
     668
     669
     670
     671
     672
     673
     674
     675
     676
     677
     678
     679
     680
     681
     682
     683
     684
     685
     686
     687
     688
     689
     690
     691
     692
     693
     694
     695
     696
     697
     698
     699
     700
     701
     702
     703
     704
     705
     706
     707
     708
     709
     710
     711
     712
     713
     714
     715
     716
     717
     718
  • branches/5.9/src/wp-includes/Requests/Hooks.php

    r52328 r56875  
    6666        return true;
    6767    }
     68
     69
     70
     71
    6872}
  • branches/5.9/src/wp-includes/Requests/IRI.php

    r52328 r56875  
    706706    }
    707707
     708
     709
     710
     711
     712
     713
     714
     715
     716
     717
     718
     719
     720
     721
    708722    /**
    709723     * Set the entire IRI. Returns true on success, false on failure (if there
  • branches/5.9/src/wp-includes/Requests/Session.php

    r52328 r56875  
    230230    }
    231231
     232
     233
     234
     235
    232236    /**
    233237     * Merge a request's data with the default data
  • branches/5.9/src/wp-includes/class-wp-block-patterns-registry.php

    r52236 r56875  
    157157    }
    158158
     159
     160
     161
     162
     163
     164
     165
     166
     167
     168
     169
     170
     171
     172
     173
    159174    /**
    160175     * Utility method to retrieve the main instance of the class.
  • branches/5.9/src/wp-includes/class-wp-block-type-registry.php

    r51154 r56875  
    168168    }
    169169
     170
     171
     172
     173
     174
     175
     176
     177
     178
     179
     180
     181
     182
     183
    170184    /**
    171185     * Utility method to retrieve the main instance of the class.
  • branches/5.9/src/wp-includes/class-wp-theme.php

    r52365 r56875  
    706706
    707707    /**
     708
     709
     710
     711
     712
     713
     714
     715
     716
     717
     718
     719
     720
     721
     722
     723
     724
     725
     726
     727
     728
     729
    708730     * Adds theme data to cache.
    709731     *
     
    17641786        return strnatcasecmp( $a->name_translated, $b->name_translated );
    17651787    }
     1788
     1789
     1790
     1791
     1792
     1793
     1794
     1795
     1796
     1797
     1798
     1799
    17661800}
  • branches/5.9/src/wp-includes/media.php

    r55774 r56875  
    23552355        }
    23562356    } elseif ( ! empty( $atts['exclude'] ) ) {
     2357
    23572358        $attachments = get_children(
    23582359            array(
     
    23672368        );
    23682369    } else {
     2370
    23692371        $attachments = get_children(
    23702372            array(
     
    23772379            )
    23782380        );
     2381
     2382
     2383
     2384
     2385
     2386
     2387
     2388
     2389
     2390
     2391
    23792392    }
    23802393
     
    27052718    }
    27062719
     2720
     2721
     2722
     2723
     2724
     2725
     2726
     2727
     2728
    27072729    if ( empty( $attachments ) ) {
    27082730        return '';
  • branches/5.9/src/wp-includes/rest-api.php

    r52328 r56875  
    10451045
    10461046    if ( ! $result ) {
     1047
    10471048        return new WP_Error( 'rest_cookie_invalid_nonce', __( 'Cookie check failed' ), array( 'status' => 403 ) );
    10481049    }
  • branches/5.9/src/wp-includes/rest-api/class-wp-rest-server.php

    r52204 r56875  
    332332
    333333        /**
    334          * Filters whether to send nocache headers on a REST API request.
    335          *
    336          * @since 4.4.0
    337          *
    338          * @param bool $rest_send_nocache_headers Whether to send no-cache headers.
    339          */
    340         $send_no_cache_headers = apply_filters( 'rest_send_nocache_headers', is_user_logged_in() );
    341         if ( $send_no_cache_headers ) {
    342             foreach ( wp_get_nocache_headers() as $header => $header_value ) {
    343                 if ( empty( $header_value ) ) {
    344                     $this->remove_header( $header );
    345                 } else {
    346                     $this->send_header( $header, $header_value );
    347                 }
    348             }
    349         }
    350 
    351         /**
    352334         * Filters whether the REST API is enabled.
    353335         *
     
    403385         * header.
    404386         */
     387
    405388        if ( isset( $_GET['_method'] ) ) {
    406389            $request->set_method( $_GET['_method'] );
    407390        } elseif ( isset( $_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'] ) ) {
    408391            $request->set_method( $_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'] );
     392
    409393        }
    410394
     
    464448         */
    465449        $served = apply_filters( 'rest_pre_serve_request', false, $result, $request, $this );
     450
     451
     452
     453
     454
     455
     456
     457
     458
     459
     460
     461
     462
     463
     464
     465
     466
     467
     468
     469
     470
     471
    466472
    467473        if ( ! $served ) {
  • branches/5.9/src/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php

    r52069 r56875  
    319319
    320320        if ( ! empty( $prepared_args['search'] ) ) {
     321
     322
     323
    321324            $prepared_args['search'] = '*' . $prepared_args['search'] . '*';
    322325        }
  • branches/5.9/src/wp-includes/shortcodes.php

    r51154 r56875  
    171171
    172172/**
    173  * Search content for shortcodes and filter shortcodes through their hooks.
     173 * Returns a list of registered shortcode names found in the given content.
     174 *
     175 * Example usage:
     176 *
     177 *     get_shortcode_tags_in_content( '[audio src="file.mp3"][/audio] [foo] [gallery ids="1,2,3"]' );
     178 *     // array( 'audio', 'gallery' )
     179 *
     180 * @since 6.3.2
     181 *
     182 * @param string $content The content to check.
     183 * @return string[] An array of registered shortcode names found in the content.
     184 */
     185function get_shortcode_tags_in_content( $content ) {
     186    if ( false === strpos( $content, '[' ) ) {
     187        return array();
     188    }
     189
     190    preg_match_all( '/' . get_shortcode_regex() . '/', $content, $matches, PREG_SET_ORDER );
     191    if ( empty( $matches ) ) {
     192        return array();
     193    }
     194
     195    $tags = array();
     196    foreach ( $matches as $shortcode ) {
     197        $tags[] = $shortcode[2];
     198
     199        if ( ! empty( $shortcode[5] ) ) {
     200            $deep_tags = get_shortcode_tags_in_content( $shortcode[5] );
     201            if ( ! empty( $deep_tags ) ) {
     202                $tags = array_merge( $tags, $deep_tags );
     203            }
     204        }
     205    }
     206
     207    return $tags;
     208}
     209
     210/**
     211 * Searches content for shortcodes and filter shortcodes through their hooks.
    174212 *
    175213 * This function is an alias for do_shortcode().
Note: See TracChangeset for help on using the changeset viewer.