WordPress.org

Make WordPress Core

Changeset 40085


Ignore:
Timestamp:
02/20/17 06:37:22 (10 months 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.