Make WordPress Core

Ticket #17737: 17737.5.patch

File 17737.5.patch, 7.0 KB (added by SergeyBiryukov, 11 years ago)
  • src/wp-includes/query.php

     
    14601460                $qv['paged'] = absint($qv['paged']);
    14611461                $qv['cat'] = preg_replace( '|[^0-9,-]|', '', $qv['cat'] ); // comma separated list of positive or negative integers
    14621462                $qv['author'] = preg_replace( '|[^0-9,-]|', '', $qv['author'] ); // comma separated list of positive or negative integers
    1463                 $qv['pagename'] = trim( $qv['pagename'] );
    1464                 $qv['name'] = trim( $qv['name'] );
     1463                $qv['pagename'] = ( ! is_array( $qv['pagename'] ) ) ? trim( $qv['pagename'] ) : '';
     1464                $qv['name'] = ( ! is_array( $qv['name'] ) ) ? trim( $qv['name'] ) : '';
    14651465                if ( '' !== $qv['hour'] ) $qv['hour'] = absint($qv['hour']);
    14661466                if ( '' !== $qv['minute'] ) $qv['minute'] = absint($qv['minute']);
    14671467                if ( '' !== $qv['second'] ) $qv['second'] = absint($qv['second']);
     
    14681468                if ( '' !== $qv['menu_order'] ) $qv['menu_order'] = absint($qv['menu_order']);
    14691469
    14701470                // Compat. Map subpost to attachment.
    1471                 if ( '' != $qv['subpost'] )
     1471                if ( '' != $qv['subpost'] && ! is_array( $qv['subpost'] ) )
    14721472                        $qv['attachment'] = $qv['subpost'];
    14731473                if ( '' != $qv['subpost_id'] )
    14741474                        $qv['attachment_id'] = $qv['subpost_id'];
     
    17241724                        if ( 'post_tag' == $taxonomy )
    17251725                                continue;       // Handled further down in the $q['tag'] block
    17261726
    1727                         if ( $t->query_var && !empty( $q[$t->query_var] ) ) {
     1727                        if ( $t->query_var && ! empty( $q[ $t->query_var ] ) && ! is_array( $q[ $t->query_var ] ) ) {
    17281728                                $tax_query_defaults = array(
    17291729                                        'taxonomy' => $taxonomy,
    17301730                                        'field' => 'slug',
     
    17311731                                );
    17321732
    17331733                                if ( isset( $t->rewrite['hierarchical'] ) && $t->rewrite['hierarchical'] ) {
    1734                                         $q[$t->query_var] = wp_basename( $q[$t->query_var] );
     1734                                        $q[ $t->query_var ] = wp_basename( $q[ $t->query_var ] );
    17351735                                }
    17361736
    1737                                 $term = $q[$t->query_var];
     1737                                $term = $q[ $t->query_var ];
    17381738
    17391739                                if ( strpos($term, '+') !== false ) {
    17401740                                        $terms = preg_split( '/[+]+/', $term );
     
    17521752                }
    17531753
    17541754                // Category stuff
    1755                 if ( !empty($q['cat']) && '0' != $q['cat'] && !$this->is_singular && $this->query_vars_changed ) {
    1756                         $q['cat'] = ''.urldecode($q['cat']).'';
    1757                         $q['cat'] = addslashes_gpc($q['cat']);
    1758                         $cat_array = preg_split('/[,\s]+/', $q['cat']);
     1755                if ( ! empty( $q['cat'] ) && ! is_array( $q['cat'] ) && '0' != $q['cat'] && ! $this->is_singular && $this->query_vars_changed ) {
     1756                        $q['cat'] = urldecode( $q['cat'] );
     1757                        $q['cat'] = addslashes_gpc( $q['cat'] );
     1758                        $cat_array = preg_split( '/[,\s]+/', $q['cat'] );
    17591759                        $q['cat'] = '';
    17601760                        $req_cats = array();
    17611761                        foreach ( (array) $cat_array as $cat ) {
     
    18141814                }
    18151815
    18161816                // Tag stuff
    1817                 if ( '' != $q['tag'] && !$this->is_singular && $this->query_vars_changed ) {
     1817                if ( '' != $q['tag'] && ! is_array( $q['tag'] ) && ! $this->is_singular && $this->query_vars_changed ) {
    18181818                        if ( strpos($q['tag'], ',') !== false ) {
    18191819                                $tags = preg_split('/[,\r\n\t ]+/', $q['tag']);
    18201820                                foreach ( (array) $tags as $tag ) {
     
    20512051                        $q['page_id'] = get_option('page_on_front');
    20522052                }
    20532053
    2054                 if ( isset($q['page']) ) {
    2055                         $q['page'] = trim($q['page'], '/');
    2056                         $q['page'] = absint($q['page']);
     2054                if ( isset( $q['page'] ) && ! is_array( $q['page'] ) ) {
     2055                        $q['page'] = trim( $q['page'], '/' );
     2056                        $q['page'] = absint( $q['page'] );
    20572057                }
    20582058
    20592059                // If true, forcibly turns off SQL_CALC_FOUND_ROWS even when limits are present.
     
    22332233                }
    22342234
    22352235                // If a search pattern is specified, load the posts that match
    2236                 if ( !empty($q['s']) ) {
     2236                if ( ! empty( $q['s'] ) && ! is_array( $q['s'] ) ) {
    22372237                        // added slashes screw with quote grouping when done early, so done later
    2238                         $q['s'] = stripslashes($q['s']);
     2238                        $q['s'] = stripslashes( $q['s'] );
    22392239                        if ( empty( $_GET['s'] ) && $this->is_main_query() )
    2240                                 $q['s'] = urldecode($q['s']);
    2241                         if ( !empty($q['sentence']) ) {
    2242                                 $q['search_terms'] = array($q['s']);
     2240                                $q['s'] = urldecode( $q['s'] );
     2241                        if ( ! empty( $q['sentence'] ) ) {
     2242                                $q['search_terms'] = array( $q['s'] );
    22432243                        } else {
    2244                                 preg_match_all('/".*?("|$)|((?<=[\r\n\t ",+])|^)[^\r\n\t ",+]+/', $q['s'], $matches);
    2245                                 $q['search_terms'] = array_map('_search_terms_tidy', $matches[0]);
     2244                                preg_match_all( '/".*?("|$)|((?<=[\r\n\t ",+])|^)[^\r\n\t ",+]+/', $q['s'], $matches );
     2245                                $q['search_terms'] = array_map( '_search_terms_tidy', $matches[0] );
    22462246                        }
    2247                         $n = !empty($q['exact']) ? '' : '%';
     2247                        $n = ! empty( $q['exact'] ) ? '' : '%';
    22482248                        $searchand = '';
    22492249                        foreach( (array) $q['search_terms'] as $term ) {
    22502250                                $term = esc_sql( like_escape( $term ) );
     
    23472347
    23482348                // Author/user stuff
    23492349
    2350                 if ( ! empty( $q['author'] ) && $q['author'] != '0' ) {
    2351                         $q['author'] = addslashes_gpc( '' . urldecode( $q['author'] ) );
     2350                if ( ! empty( $q['author'] ) && ! is_array( $q['author'] ) && $q['author'] != '0' ) {
     2351                        $q['author'] = addslashes_gpc( urldecode( $q['author'] ) );
    23522352                        $authors = array_unique( array_map( 'intval', preg_split( '/[,\s]+/', $q['author'] ) ) );
    23532353                        foreach ( $authors as $author ) {
    23542354                                $key = $author > 0 ? 'author__in' : 'author__not_in';
     
    23672367
    23682368                // Author stuff for nice URLs
    23692369
    2370                 if ( '' != $q['author_name'] ) {
     2370                if ( '' != $q['author_name'] && ! is_array( $q['author_name'] ) ) {
    23712371                        if ( strpos($q['author_name'], '/') !== false ) {
    23722372                                $q['author_name'] = explode('/', $q['author_name']);
    23732373                                if ( $q['author_name'][ count($q['author_name'])-1 ] ) {
     
    23902390
    23912391                $where .= $search . $whichauthor . $whichmimetype;
    23922392
    2393                 if ( empty($q['order']) || ((strtoupper($q['order']) != 'ASC') && (strtoupper($q['order']) != 'DESC')) )
     2393                if ( empty( $q['order'] ) || is_array( $q['order'] ) || ! in_array( strtoupper( $q['order'] ), array( 'ASC', 'DESC' ) ) )
    23942394                        $q['order'] = 'DESC';
    23952395
    23962396                // Order by
    2397                 if ( empty($q['orderby']) ) {
     2397                if ( empty( $q['orderby'] ) ) {
    23982398                        $orderby = "$wpdb->posts.post_date " . $q['order'];
    2399                 } elseif ( 'none' == $q['orderby'] ) {
     2399                } elseif ( 'none' == $q['orderby'] || is_array( $q['orderby'] ) ) {
    24002400                        $orderby = '';
    24012401                } elseif ( $q['orderby'] == 'post__in' && ! empty( $post__in ) ) {
    24022402                        $orderby = "FIELD( {$wpdb->posts}.ID, $post__in )";
     
    24042404                        $orderby = "FIELD( {$wpdb->posts}.post_parent, $post_parent__in )";
    24052405                } else {
    24062406                        // Used to filter values
    2407                         $allowed_keys = array('name', 'author', 'date', 'title', 'modified', 'menu_order', 'parent', 'ID', 'rand', 'comment_count');
    2408                         if ( !empty($q['meta_key']) ) {
     2407                        $allowed_keys = array( 'name', 'author', 'date', 'title', 'modified', 'menu_order', 'parent', 'ID', 'rand', 'comment_count' );
     2408                        if ( ! empty( $q['meta_key'] ) ) {
    24092409                                $allowed_keys[] = $q['meta_key'];
    24102410                                $allowed_keys[] = 'meta_value';
    24112411                                $allowed_keys[] = 'meta_value_num';
    24122412                        }
    2413                         $q['orderby'] = urldecode($q['orderby']);
    2414                         $q['orderby'] = addslashes_gpc($q['orderby']);
     2413                        $q['orderby'] = urldecode( $q['orderby'] );
     2414                        $q['orderby'] = addslashes_gpc( $q['orderby'] );
    24152415
    24162416                        $orderby_array = array();
    24172417                        foreach ( explode( ' ', $q['orderby'] ) as $i => $orderby ) {