WordPress.org

Make WordPress Core

Ticket #21688: 21688.patch

File 21688.patch, 1.8 KB (added by azaozz, 3 years ago)
  • wp-includes/query.php

     
    21742174                } 
    21752175 
    21762176                // If a search pattern is specified, load the posts that match 
    2177                 if ( !empty($q['s']) ) { 
     2177                // Sanity check: urlencoded search string shouldn't be more than 1600 characters 
     2178                // (some browsers won't send more than 2000 incl. the URL in a GET request). 
     2179                if ( !empty($q['s']) && strlen($q['s']) < 1600 ) { 
    21782180                        // added slashes screw with quote grouping when done early, so done later 
    21792181                        $q['s'] = stripslashes($q['s']); 
    21802182                        if ( empty( $_GET['s'] ) && $this->is_main_query() ) 
     
    21832185                                $q['search_terms'] = array($q['s']); 
    21842186                        } else { 
    21852187                                preg_match_all('/".*?("|$)|((?<=[\r\n\t ",+])|^)[^\r\n\t ",+]+/', $q['s'], $matches); 
    2186                                 $q['search_terms'] = array_map('_search_terms_tidy', $matches[0]); 
     2188                                $q['_search_terms'] = array_map('_search_terms_tidy', $matches[0]); 
     2189                                $q['search_terms'] = array(); 
     2190 
     2191                                foreach ( (array) $q['_search_terms'] as $term ) { 
     2192                                        if ( empty($term) || ( strlen($term) < 3 && !is_numeric($term) ) ) 
     2193                                                continue; 
     2194                                        $q['search_terms'][] = $term; 
     2195                                } 
     2196 
     2197                                unset($q['_search_terms']); 
     2198                                // if the search string has only short terms or more than 10 terms match it as sentence 
     2199                                if ( empty($q['search_terms']) || count($q['search_terms']) > 10 ) 
     2200                                        $q['search_terms'] = array($q['s']); 
    21872201                        } 
     2202 
    21882203                        $n = !empty($q['exact']) ? '' : '%'; 
    21892204                        $searchand = ''; 
    2190                         foreach( (array) $q['search_terms'] as $term ) { 
     2205                        foreach( $q['search_terms'] as $term ) { 
    21912206                                $term = esc_sql( like_escape( $term ) ); 
    21922207                                $search .= "{$searchand}(($wpdb->posts.post_title LIKE '{$n}{$term}{$n}') OR ($wpdb->posts.post_content LIKE '{$n}{$term}{$n}'))"; 
    21932208                                $searchand = ' AND ';