WordPress.org

Make WordPress Core

Ticket #2123: 404 non existant posts, authors and cats.diff

File 404 non existant posts, authors and cats.diff, 1.8 KB (added by majelbstoat, 12 years ago)

404 when an invalid postname / category / authorname is supplied

  • classes.php

     
    7474
    7575        // Parse a query string and set query type booleans.
    7676        function parse_query ($query) {
     77                global $wpdb;
    7778                if ( !empty($query) || !isset($this->query) ) {
    7879                        $this->init();
    7980                        parse_str($query, $qv);
     
    102103                        $this->is_single = true;
    103104                        $this->is_attachment = true;
    104105                } elseif ('' != $qv['name']) {
    105                         $this->is_single = true;
     106                                if ($qv['name'] == $wpdb->get_var("SELECT post_name FROM $wpdb->posts WHERE post_name = '" . $qv['name'] . "' LIMIT 1")) {
     107                                        $this->is_single = true;                       
     108                                }
     109                                else {
     110                                        $this->is_404 = true;
     111                                        $this->is_single = false;
     112                                }
    106113                } elseif ( $qv['p'] ) {
    107114                        $this->is_single = true;
    108115                } elseif (('' != $qv['hour']) && ('' != $qv['minute']) &&('' != $qv['second']) && ('' != $qv['year']) && ('' != $qv['monthnum']) && ('' != $qv['day'])) {
     
    189196                        }
    190197
    191198                        if ('' != $qv['category_name']) {
    192                                 $this->is_category = true;
     199                                if ($qv['category_name'] == $wpdb->get_var("SELECT category_nicename FROM $wpdb->categories WHERE category_nicename = '" . $qv['category_name'] . "' LIMIT 1")) {
     200                                        $this->is_category = true;                     
     201                                }
     202                                else {
     203                                        $this->is_404 = true;
     204                                        $this->is_category = false;
     205                                }
    193206                        }
    194207           
    195208                        if ((empty($qv['author'])) || ($qv['author'] == '0')) {
    196209                                $this->is_author = false;
    197210                        } else {
    198                                 $this->is_author = true;
     211                                if ($qv['author_name'] == $wpdb->get_var("SELECT user_nicename FROM $wpdb->users WHERE user_nicename = '" . $qv['user_nicename'] . "' LIMIT 1")) {
     212                                        $this->is_author = true;                       
     213                                }
     214                                else {
     215                                        $this->is_404 = true;
     216                                        $this->is_author = false;
     217                                }
    199218                        }
    200219
    201220                        if ('' != $qv['author_name']) {