WordPress.org

Make WordPress Core

Ticket #13413: 13413.patch

File 13413.patch, 8.4 KB (added by hakre, 5 years ago)
  • wp-includes/query.php

    ### Eclipse Workspace Patch 1.0
    #P wordpress-trunk
     
    16051605         * 
    16061606         * @return array List of posts. 
    16071607         */ 
    1608         function &get_posts() { 
     1608        function get_posts() { 
    16091609                global $wpdb, $user_ID, $_wp_using_ext_object_cache; 
    16101610 
    16111611                do_action_ref_array('pre_get_posts', array(&$this)); 
     
    19461946                // Tags 
    19471947                if ( '' != $q['tag'] ) { 
    19481948                        if ( strpos($q['tag'], ',') !== false ) { 
    1949                                 $tags = preg_split('/[,\s]+/', $q['tag']); 
     1949                                $tags = preg_split('/[,\r\n\t ]+/', $q['tag']); 
    19501950                                foreach ( (array) $tags as $tag ) { 
    19511951                                        $tag = sanitize_term_field('slug', $tag, 0, 'post_tag', 'db'); 
    19521952                                        $q['tag_slug__in'][] = $tag; 
    19531953                                } 
    1954                         } else if ( preg_match('/[+\s]+/', $q['tag']) || !empty($q['cat']) ) { 
    1955                                 $tags = preg_split('/[+\s]+/', $q['tag']); 
     1954                        } else if ( preg_match('/[+\r\n\t ]+/', $q['tag']) || !empty($q['cat']) ) { 
     1955                                $tags = preg_split('/[+\r\n\t ]+/', $q['tag']); 
    19561956                                foreach ( (array) $tags as $tag ) { 
    19571957                                        $tag = sanitize_term_field('slug', $tag, 0, 'post_tag', 'db'); 
    19581958                                        $q['tag_slug__and'][] = $tag; 
     
    26902690         * @param string $query URL query string. 
    26912691         * @return array List of posts. 
    26922692         */ 
    2693         function &query($query) { 
     2693        function query($query) { 
    26942694                $this->parse_query($query); 
    26952695                return $this->get_posts(); 
    26962696        } 
  • wp-includes/classes.php

     
    128128         * 
    129129         * @param array|string $extra_query_vars Set the extra query variables. 
    130130         */ 
    131         function parse_request($extra_query_vars = '') { 
     131        function parse_request( $extra_query_vars = '' ) { 
    132132                global $wp_rewrite; 
    133133 
    134                 $this->query_vars = array(); 
    135                 $taxonomy_query_vars = array(); 
     134                $this->query_vars     = array(); 
     135                $taxonomy_query_vars  = array(); 
    136136                $post_type_query_vars = array(); 
    137137 
    138                 if ( is_array($extra_query_vars) ) 
    139                         $this->extra_query_vars = & $extra_query_vars; 
    140                 else if (! empty($extra_query_vars)) 
    141                         parse_str($extra_query_vars, $this->extra_query_vars); 
     138                if ( is_array( $extra_query_vars ) ) 
     139                        $this->extra_query_vars = $extra_query_vars; 
     140                else if (! empty( $extra_query_vars ) ) 
     141                        parse_str( $extra_query_vars, $this->extra_query_vars ); 
    142142 
    143143                // Process PATH_INFO, REQUEST_URI, and 404 for permalinks. 
    144144 
     
    150150                        $error = '404'; 
    151151                        $this->did_permalink = true; 
    152152 
    153                         if ( isset($_SERVER['PATH_INFO']) ) 
    154                                 $pathinfo = $_SERVER['PATH_INFO']; 
     153                        $pathinfo = ''; 
     154                        if ( isset( $_SERVER['PATH_INFO'] ) ) { 
     155                                $pathinfo_array = explode( '?', $_SERVER['PATH_INFO'] ); 
     156                                $pathinfo       = str_replace("%", "%25", $pathinfo_array[0] ); 
     157                                $pathinfo_array = null; 
     158                        } 
     159                         
     160                        $req_uri_array = explode( '?', $_SERVER['REQUEST_URI'] ); 
     161                        $req_uri       = $req_uri_array[0]; 
     162                        $req_uri_array = null; 
     163                         
     164                        $home_path_array = parse_url( home_url() ); 
     165                        if ( isset( $home_path_array['path'] ) ) 
     166                                $home_path = $home_path_array['path']; 
    155167                        else 
    156                                 $pathinfo = ''; 
    157                         $pathinfo_array = explode('?', $pathinfo); 
    158                         $pathinfo = str_replace("%", "%25", $pathinfo_array[0]); 
    159                         $req_uri = $_SERVER['REQUEST_URI']; 
    160                         $req_uri_array = explode('?', $req_uri); 
    161                         $req_uri = $req_uri_array[0]; 
    162                         $self = $_SERVER['PHP_SELF']; 
    163                         $home_path = parse_url(home_url()); 
    164                         if ( isset($home_path['path']) ) 
    165                                 $home_path = $home_path['path']; 
    166                         else 
    167168                                $home_path = ''; 
    168                         $home_path = trim($home_path, '/'); 
     169                        $home_path_array = null; 
     170                        $home_path = trim( $home_path, '/' ); 
    169171 
    170172                        // Trim path info from the end and the leading home path from the 
    171                         // front.  For path info requests, this leaves us with the requesting 
     173                        // front. For path info requests, this leaves us with the requesting 
    172174                        // filename, if any.  For 404 requests, this leaves us with the 
    173175                        // requested permalink. 
    174                         $req_uri = str_replace($pathinfo, '', rawurldecode($req_uri)); 
    175                         $req_uri = trim($req_uri, '/'); 
    176                         $req_uri = preg_replace("|^$home_path|", '', $req_uri); 
    177                         $req_uri = trim($req_uri, '/'); 
    178                         $pathinfo = trim($pathinfo, '/'); 
    179                         $pathinfo = preg_replace("|^$home_path|", '', $pathinfo); 
    180                         $pathinfo = trim($pathinfo, '/'); 
    181                         $self = trim($self, '/'); 
    182                         $self = preg_replace("|^$home_path|", '', $self); 
    183                         $self = trim($self, '/'); 
     176                        $req_uri  = str_replace( $pathinfo, '', rawurldecode( $req_uri ) ); 
     177                        $req_uri  = trim( $req_uri, '/' ); 
     178                        $req_uri  = preg_replace( "|^$home_path|", '', $req_uri ); 
     179                        $req_uri  = trim( $req_uri, '/' ); 
     180                        $pathinfo = trim( $pathinfo, '/' ); 
     181                        $pathinfo = preg_replace( "|^$home_path|", '', $pathinfo ); 
     182                        $pathinfo = trim( $pathinfo, '/' ); 
     183                        $self     = $_SERVER['PHP_SELF']; 
     184                        $self     = trim( $self, '/' ); 
     185                        $self     = preg_replace( "|^$home_path|", '', $self ); 
     186                        $self     = trim( $self, '/' ); 
    184187 
    185188                        // The requested permalink is in $pathinfo for path info requests and 
    186                         //  $req_uri for other requests. 
    187                         if ( ! empty($pathinfo) && !preg_match('|^.*' . $wp_rewrite->index . '$|', $pathinfo) ) { 
     189                        // $req_uri for other requests. 
     190                        if ( ! empty( $pathinfo ) && !preg_match( '|^.*' . $wp_rewrite->index . '$|', $pathinfo ) ) { 
    188191                                $request = $pathinfo; 
    189192                        } else { 
    190193                                // If the request uri is the index, blank it out so that we don't try to match it against a rule. 
     
    197200 
    198201                        // Look for matches. 
    199202                        $request_match = $request; 
    200                         foreach ( (array) $rewrite as $match => $query) { 
     203                        foreach ( $rewrite as $match => $query) { 
    201204                                // Don't try to match against AtomPub calls 
    202205                                if ( $req_uri == 'wp-app.php' ) 
    203206                                        break; 
    204207 
    205208                                // If the requesting file is the anchor of the match, prepend it 
    206209                                // to the path info. 
    207                                 if ( (! empty($req_uri)) && (strpos($match, $req_uri) === 0) && ($req_uri != $request) ) 
     210                                if ( ( ! empty ( $req_uri ) ) && ( strpos( $match, $req_uri ) === 0 ) && ( $req_uri != $request ) ) 
    208211                                        $request_match = $req_uri . '/' . $request; 
    209212 
    210                                 if ( preg_match("#^$match#", $request_match, $matches) || 
    211                                         preg_match("#^$match#", urldecode($request_match), $matches) ) { 
     213                                if ( preg_match( "#^$match#", $request_match, $matches ) || 
     214                                        preg_match( "#^$match#", urldecode( $request_match ), $matches ) ) { 
    212215                                        // Got a match. 
    213216                                        $this->matched_rule = $match; 
    214217 
    215218                                        // Trim the query of everything up to the '?'. 
    216                                         $query = preg_replace("!^.+\?!", '', $query); 
    217  
     219                                        $query = preg_replace( "!^.+\?!", '', $query ); 
    218220                                        // Substitute the substring matches into the query. 
    219                                         $query = addslashes(WP_MatchesMapRegex::apply($query, $matches)); 
     221                                        $query = addslashes( WP_MatchesMapRegex::apply( $query, $matches ) ); 
    220222 
    221223                                        $this->matched_query = $query; 
    222224 
    223225                                        // Parse the query. 
    224                                         parse_str($query, $perma_query_vars); 
     226                                        parse_str( $query, $perma_query_vars ); 
    225227 
    226                                         // If we're processing a 404 request, clear the error var 
     228                                        // If we're processing a 404 request, clear the error vars 
    227229                                        // since we found something. 
    228                                         if ( isset($_GET['error']) ) 
    229                                                 unset($_GET['error']); 
     230                                        $_GET['error'] = null; 
     231                                        $error         = null; 
    230232 
    231                                         if ( isset($error) ) 
    232                                                 unset($error); 
    233  
    234233                                        break; 
    235234                                } 
    236235                        } 
    237236 
    238237                        // If req_uri is empty or if it is a request for ourself, unset error. 
    239                         if ( empty($request) || $req_uri == $self || strpos($_SERVER['PHP_SELF'], 'wp-admin/') !== false ) { 
    240                                 if ( isset($_GET['error']) ) 
    241                                         unset($_GET['error']); 
     238                        if ( empty( $request ) || $req_uri == $self || strpos( $_SERVER['PHP_SELF'], 'wp-admin/' ) !== false ) { 
     239                                $_GET['error'] = null; 
     240                                $error         = null; 
     241                                if ( isset( $perma_query_vars ) && strpos( $_SERVER['PHP_SELF'], 'wp-admin/' ) !== false ) 
     242                                        unset( $perma_query_vars ); 
    242243 
    243                                 if ( isset($error) ) 
    244                                         unset($error); 
    245  
    246                                 if ( isset($perma_query_vars) && strpos($_SERVER['PHP_SELF'], 'wp-admin/') !== false ) 
    247                                         unset($perma_query_vars); 
    248  
    249244                                $this->did_permalink = false; 
    250245                        } 
    251246                } 
    252247 
    253                 $this->public_query_vars = apply_filters('query_vars', $this->public_query_vars); 
     248                $this->public_query_vars = apply_filters( 'query_vars', $this->public_query_vars ); 
    254249 
    255250                foreach ( $GLOBALS['wp_taxonomies'] as $taxonomy => $t ) 
    256251                        if ( $t->query_var ) 
     
    502497         */ 
    503498        function main($query_args = '') { 
    504499                $this->init(); 
    505                 $this->parse_request($query_args); 
     500                $this->parse_request($query_args);               
    506501                $this->send_headers(); 
    507502                $this->query_posts(); 
    508503                $this->handle_404();