Make WordPress Core

Changeset 46495 for branches/4.7


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.