WordPress.org

Make WordPress Core

Ticket #10649: query.php.2.diff

File query.php.2.diff, 1.5 KB (added by scribu, 12 years ago)

check allowed_keys earlier, remove unnecessary comments

  • wp-includes/query.php

     
    20212021                        if ( !empty($q['meta_key']) ) {
    20222022                                $allowed_keys[] = $q['meta_key'];
    20232023                                $allowed_keys[] = 'meta_value';
     2024                                $allowed_keys[] = 'meta_value_num';
    20242025                        }
    20252026                        $q['orderby'] = urldecode($q['orderby']);
    20262027                        $q['orderby'] = addslashes_gpc($q['orderby']);
     
    20282029                        if ( empty($orderby_array) )
    20292030                                $orderby_array[] = $q['orderby'];
    20302031                        $q['orderby'] = '';
     2032
    20312033                        for ($i = 0; $i < count($orderby_array); $i++) {
     2034                                $orderby = $orderby_array[$i];
     2035
    20322036                                // Only allow certain values for safety
    2033                                 $orderby = $orderby_array[$i];
     2037                                if ( ! in_array($orderby, $allowed_keys) )
     2038                                        continue;
     2039
    20342040                                switch ($orderby) {
    20352041                                        case 'menu_order':
    20362042                                                break;
     
    20442050                                        case 'meta_value':
    20452051                                                $orderby = "$wpdb->postmeta.meta_value";
    20462052                                                break;
     2053                                        case 'meta_value_num':
     2054                                                $orderby = "$wpdb->postmeta.meta_value+0";
     2055                                                break;
    20472056                                        case 'comment_count':
    20482057                                                $orderby = "$wpdb->posts.comment_count";
    20492058                                                break;
    20502059                                        default:
    20512060                                                $orderby = "$wpdb->posts.post_" . $orderby;
    20522061                                }
    2053                                 if ( in_array($orderby_array[$i], $allowed_keys) )
    2054                                         $q['orderby'] .= (($i == 0) ? '' : ',') . $orderby;
     2062
     2063                                $q['orderby'] .= (($i == 0) ? '' : ',') . $orderby;
    20552064                        }
     2065
    20562066                        // append ASC or DESC at the end
    20572067                        if ( !empty($q['orderby']))
    20582068                                $q['orderby'] .= " {$q['order']}";