Make WordPress Core

Ticket #10972: posts-only-sanitize-once-2.patch

File posts-only-sanitize-once-2.patch, 2.4 KB (added by johanee, 15 years ago)

Only sanitize_post() once, avoid double filtering

  • wp-includes/post.php

     
    232232                        return $null;
    233233        } elseif ( is_object($post) && empty($post->filter) ) {
    234234                _get_post_ancestors($post);
    235                 wp_cache_add($post->ID, $post, 'posts');
    236                 $_post = &$post;
     235                $_post = sanitize_post($post, 'raw');
     236                wp_cache_add($post->ID, $_post, 'posts');
    237237        } else {
    238238                if ( is_object($post) )
    239239                        $post = $post->ID;
     
    243243                        if ( ! $_post )
    244244                                return $null;
    245245                        _get_post_ancestors($_post);
     246                        $_post = sanitize_post($_post, 'raw');
    246247                        wp_cache_add($_post->ID, $_post, 'posts');
    247248                }
    248249        }
    249250
    250         $_post = sanitize_post($_post, $filter);
     251        if ($filter != 'raw')
     252                $_post = sanitize_post($_post, $filter);
    251253
    252254        if ( $output == OBJECT ) {
    253255                return $_post;
     
    817819 */
    818820function sanitize_post($post, $context = 'display') {
    819821        if ( is_object($post) ) {
     822                // Check if post already filtered for this context
     823                if ( isset($post->filter) && $context == $post->filter )
     824                        return $post;
    820825                if ( !isset($post->ID) )
    821826                        $post->ID = 0;
    822827                foreach ( array_keys(get_object_vars($post)) as $field )
    823828                        $post->$field = sanitize_post_field($field, $post->$field, $post->ID, $context);
    824829                $post->filter = $context;
    825830        } else {
     831                // Check if post already filtered for this context
     832                if ( isset($post['filter']) && $context == $post['filter'] )
     833                        return $post;
    826834                if ( !isset($post['ID']) )
    827835                        $post['ID'] = 0;
    828836                foreach ( array_keys($post) as $field )
     
    24502458                return $pages;
    24512459        }
    24522460
     2461        // Sanitize before caching so it'll only get done once
     2462        $num_pages = count($pages);
     2463        for ($i = 0; $i < $num_pages; $i++) {
     2464                $pages[$i] = sanitize_post($pages[$i], 'raw');
     2465        }
     2466
    24532467        // Update cache.
    24542468        update_page_cache($pages);
    24552469
  • wp-includes/query.php

     
    23602360                if ( !$q['suppress_filters'] )
    23612361                        $this->posts = apply_filters('the_posts', $this->posts);
    23622362
     2363                // Sanitize before caching so it'll only get done once
     2364                $num_posts = count($this->posts);
     2365                for ($i = 0; $i < $num_posts; $i++) {
     2366                        $this->posts[$i] = sanitize_post($this->posts[$i], 'raw');
     2367                }
     2368
    23632369                update_post_caches($this->posts);
    23642370
    23652371                $this->post_count = count($this->posts);