Make WordPress Core

Changeset 40085


Ignore:
Timestamp:
02/20/2017 06:37:22 AM (7 years ago)
Author:
dd32
Message:

Feeds: Prevent empty feeds from returning 404 errors.

Partial revert of [38929].

This reverts the source code from the commit for #30210 to prevent valid but empty feeds from returning 404 file not found errors for the home and custom feeds.

The tests in the commit that remain applicable are retained.

Props pavelevap for reporting, stevenkword for initial patch, peterwilsoncc.
See #30210.
Merges [40030] to the 4.7 branch.
Fixes #39157.

Location:
branches/4.7
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/4.7

  • branches/4.7/src/wp-includes/functions.php

    r40075 r40085  
    12131213function do_feed() {
    12141214    global $wp_query;
    1215 
    1216     // Determine if we are looking at the main comment feed
    1217     $is_main_comments_feed = ( $wp_query->is_comment_feed() && ! $wp_query->is_singular() );
    1218 
    1219     /*
    1220      * Check the queried object for the existence of posts if it is not a feed for an archive,
    1221      * search result, or main comments. By checking for the absense of posts we can prevent rendering the feed
    1222      * templates at invalid endpoints. e.g.) /wp-content/plugins/feed/
    1223      */
    1224     if ( ! $wp_query->have_posts() && ! ( $wp_query->is_archive() || $wp_query->is_search() || $is_main_comments_feed ) ) {
    1225         wp_die( __( 'ERROR: This is not a valid feed.' ), '', array( 'response' => 404 ) );
    1226     }
    12271215
    12281216    $feed = get_query_var( 'feed' );
  • branches/4.7/tests/phpunit/tests/feed/rss2.php

    r39615 r40085  
    458458        $this->assertEquals( 1, count( $rss ) );
    459459    }
    460 
    461     /*
    462      * Check to make sure we are not rendering feed templates for invalid feed endpoints.
    463      * e.g. https://example.com/wp-content/feed/
    464      *
    465      * @ticket 30210
    466      */
    467     function test_invalid_feed_endpoint() {
    468         // An example of an invalid feed endpoint
    469         $this->go_to( 'wp-content/feed/' );
    470 
    471         // Queries performed on invalid feed endpoints should never contain posts.
    472         $this->assertFalse( have_posts() );
    473 
    474         // This is the assertion. Once the exception is thrown in do_feed, execution stops, preventing futher assertions.
    475         $this->setExpectedException( 'WPDieException', 'ERROR: This is not a valid feed.' );
    476         do_feed();
    477     }
    478 
    479     /*
    480      * Make sure the requested feed is registered before rendering the requested template.
    481      *
    482      * @ticket 30210
    483      */
    484     function test_nonexistent_feeds() {
    485         global $wp_rewrite;
    486         $badfeed = 'badfeed';
    487 
    488         $this->assertNotContains( $badfeed, $wp_rewrite->feeds );
    489 
    490         $this->go_to( '/?feed=' . $badfeed );
    491 
    492         // This is the assertion. Once the exception is thrown in do_feed, execution stops, preventing futher assertions.
    493         $this->setExpectedException( 'WPDieException', 'ERROR: This is not a valid feed template.' );
    494         do_feed();
    495     }
    496 
    497460}
Note: See TracChangeset for help on using the changeset viewer.