WordPress.org

Make WordPress Core

Ticket #21688: 21688.patch

File 21688.patch, 1.8 KB (added by azaozz, 6 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 ';