Make WordPress Core

Changeset 46495


Ignore:
Timestamp:
10/14/2019 06:49:56 PM (7 years ago)
Author:
whyisjake
Message:

Backporting several bug fixes.

  • Query: Remove the static query property.
  • HTTP API: Protect against hex interpretation.
  • Filesystem API: Prevent directory travelersals when creating new folders.
  • Administration: Ensure that admin referer nonce is valid.
  • REST API: Send a Vary: Origin header on GET requests.

Backports [46474], [46475], [46476], [46477], [46478], [46483], [46485] to the 4.7 branch.

Location:
branches/4.7
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • branches/4.7

  • branches/4.7/src/wp-includes/class-wp-query.php

    r39953 r46495  
    583583            , 'attachment_id'
    584584            , 'name'
    585             , 'static'
    586585            , 'pagename'
    587586            , 'page_id'
     
    812811            // post is being queried.
    813812            $this->is_single = true;
    814         } elseif ( '' != $qv['static'] || '' != $qv['pagename'] || !empty($qv['page_id']) ) {
     813        } elseif ( '' != $qv['pagename'] || !empty($qv['page_id']) ) {
    815814            $this->is_page = true;
    816815            $this->is_single = false;
     
    30493048            $this->found_posts = $wpdb->get_var( apply_filters_ref_array( 'found_posts_query', array( 'SELECT FOUND_ROWS()', &$this ) ) );
    30503049        } else {
    3051             $this->found_posts = count( $this->posts );
     3050            if ( is_array( $this->posts ) ) {
     3051                $this->found_posts = count( $this->posts );
     3052            } else {
     3053                if ( null === $this->posts ) {
     3054                    $this->found_posts = 0;
     3055                } else {
     3056                    $this->found_posts = 1;
     3057                }
     3058            }
    30523059        }
    30533060
  • branches/4.7/src/wp-includes/class-wp.php

    r44054 r46495  
    1616     * @var array
    1717     */
    18     public $public_query_vars = array('m', 'p', 'posts', 'w', 'cat', 'withcomments', 'withoutcomments', 's', 'search', 'exact', 'sentence', 'calendar', 'page', 'paged', 'more', 'tb', 'pb', 'author', 'order', 'orderby', 'year', 'monthnum', 'day', 'hour', 'minute', 'second', 'name', 'category_name', 'tag', 'feed', 'author_name', 'static', 'pagename', 'page_id', 'error', 'attachment', 'attachment_id', 'subpost', 'subpost_id', 'preview', 'robots', 'taxonomy', 'term', 'cpage', 'post_type', 'embed' );
     18    public $public_query_vars = array( 'm', 'p', 'posts', 'w', 'cat', 'withcomments', 'withoutcomments', 's', 'search', 'exact', 'sentence', 'calendar', 'page', 'paged', 'more', 'tb', 'pb', 'author', 'order', 'orderby', 'year', 'monthnum', 'day', 'hour', 'minute', 'second', 'name', 'category_name', 'tag', 'feed', 'author_name', 'pagename', 'page_id', 'error', 'attachment', 'attachment_id', 'subpost', 'subpost_id', 'preview', 'robots', 'taxonomy', 'term', 'cpage', 'post_type', 'embed' );
    1919
    2020    /**
  • branches/4.7/src/wp-includes/functions.php

    r43991 r46495  
    16081608    if ( file_exists( $target ) )
    16091609        return @is_dir( $target );
     1610
     1611    // Do not allow path traversals.
     1612    if ( false !== strpos( $target, '../' ) || false !== strpos( $target, '..' . DIRECTORY_SEPARATOR ) ) {
     1613        return false;
     1614    }
    16101615
    16111616    // We need to find the permissions of the parent folder that exists and inherit that.
  • branches/4.7/src/wp-includes/http.php

    r42910 r46495  
    542542        } else {
    543543            $ip = gethostbyname( $host );
    544             if ( $ip === $host ) // Error condition for gethostbyname()
    545                 $ip = false;
     544            if ( $ip === $host ) { // Error condition for gethostbyname()
     545                return false;
     546            }
    546547        }
    547548        if ( $ip ) {
  • branches/4.7/src/wp-includes/pluggable.php

    r45977 r46495  
    10561056 */
    10571057function check_admin_referer( $action = -1, $query_arg = '_wpnonce' ) {
    1058     if ( -1 == $action )
     1058    if ( -1 === $action )
    10591059        _doing_it_wrong( __FUNCTION__, __( 'You should specify a nonce action to be verified by using the first parameter.' ), '3.2.0' );
    10601060
     
    10741074    do_action( 'check_admin_referer', $action, $result );
    10751075
    1076     if ( ! $result && ! ( -1 == $action && strpos( $referer, $adminurl ) === 0 ) ) {
     1076    if ( ! $result && ! ( -1 === $action && strpos( $referer, $adminurl ) === 0 ) ) {
    10771077        wp_nonce_ays( $action );
    10781078        die();
     
    25192519}
    25202520endif;
    2521 
  • branches/4.7/src/wp-includes/rest-api.php

    r40114 r46495  
    529529        header( 'Access-Control-Allow-Methods: OPTIONS, GET, POST, PUT, PATCH, DELETE' );
    530530        header( 'Access-Control-Allow-Credentials: true' );
    531         header( 'Vary: Origin' );
     531        header( 'Vary: Origin', false );
     532    } elseif ( ! headers_sent() && 'GET' === $_SERVER['REQUEST_METHOD'] && ! is_user_logged_in() ) {
     533        header( 'Vary: Origin', false );
    532534    }
    533535
  • branches/4.7/tests/phpunit/tests/auth.php

    r38420 r46495  
    164164    }
    165165
     166    public function test_check_admin_referer_with_default_action_as_string_not_doing_it_wrong() {
     167        // A valid nonce needs to be set so the check doesn't die()
     168        $_REQUEST['_wpnonce'] = wp_create_nonce( '-1' );
     169        $result               = check_admin_referer( '-1' );
     170        $this->assertSame( 1, $result );
     171
     172        unset( $_REQUEST['_wpnonce'] );
     173    }
     174
    166175    /**
    167176     * @ticket 36361
  • branches/4.7/tests/phpunit/tests/query/vars.php

    r36048 r46495  
    1717        do_action( 'init' );
    1818
    19         $this->assertEquals( array(
     19        $this->assertEquals(
     20            array(
    2021
    21             // Static public query vars:
    22             'm',
    23             'p',
    24             'posts',
    25             'w',
    26             'cat',
    27             'withcomments',
    28             'withoutcomments',
    29             's',
    30             'search',
    31             'exact',
    32             'sentence',
    33             'calendar',
    34             'page',
    35             'paged',
    36             'more',
    37             'tb',
    38             'pb',
    39             'author',
    40             'order',
    41             'orderby',
    42             'year',
    43             'monthnum',
    44             'day',
    45             'hour',
    46             'minute',
    47             'second',
    48             'name',
    49             'category_name',
    50             'tag',
    51             'feed',
    52             'author_name',
    53             'static',
    54             'pagename',
    55             'page_id',
    56             'error',
    57             'attachment',
    58             'attachment_id',
    59             'subpost',
    60             'subpost_id',
    61             'preview',
    62             'robots',
    63             'taxonomy',
    64             'term',
    65             'cpage',
    66             'post_type',
    67             'embed',
     22                // Static public query vars:
     23                'm',
     24                'p',
     25                'posts',
     26                'w',
     27                'cat',
     28                'withcomments',
     29                'withoutcomments',
     30                's',
     31                'search',
     32                'exact',
     33                'sentence',
     34                'calendar',
     35                'page',
     36                'paged',
     37                'more',
     38                'tb',
     39                'pb',
     40                'author',
     41                'order',
     42                'orderby',
     43                'year',
     44                'monthnum',
     45                'day',
     46                'hour',
     47                'minute',
     48                'second',
     49                'name',
     50                'category_name',
     51                'tag',
     52                'feed',
     53                'author_name',
     54                'pagename',
     55                'page_id',
     56                'error',
     57                'attachment',
     58                'attachment_id',
     59                'subpost',
     60                'subpost_id',
     61                'preview',
     62                'robots',
     63                'taxonomy',
     64                'term',
     65                'cpage',
     66                'post_type',
     67                'embed',
    6868
    69             // Dynamically added public query vars:
    70             'post_format',
    71             'rest_route',
     69                // Dynamically added public query vars:
     70                'post_format',
     71                'rest_route',
    7272
    73         ), $wp->public_query_vars, 'Care should be taken when introducing new public query vars. See https://core.trac.wordpress.org/ticket/35115' );
     73            ),
     74            $wp->public_query_vars,
     75            'Care should be taken when introducing new public query vars. See https://core.trac.wordpress.org/ticket/35115'
     76        );
    7477    }
    7578
Note: See TracChangeset for help on using the changeset viewer.