From 52e6f5406338840bd31709c25c0a297cf3b22d4d Mon Sep 17 00:00:00 2001 From: nacin Date: Fri, 29 Apr 2011 14:44:43 +0000 Subject: [PATCH] Update the self-referential destruction sequence in WP_Widget_RSS to account for trailing slashes. TODO: Strengthen our validation here. git-svn-id: http://svn.automattic.com/wordpress/trunk@17765 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-admin/includes/dashboard.php | 30 ++++++++++++++++++++++++++---- wp-includes/default-widgets.php | 2 +- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/wp-admin/includes/dashboard.php b/wp-admin/includes/dashboard.php index 2a96ceadc1..19186ee582 100644 --- a/wp-admin/includes/dashboard.php +++ b/wp-admin/includes/dashboard.php @@ -925,9 +925,17 @@ function wp_dashboard_plugins() { * @since 2.5.0 */ function wp_dashboard_plugins_output() { - $popular = fetch_feed( 'http://wordpress.org/extend/plugins/rss/browse/popular/' ); - $new = fetch_feed( 'http://wordpress.org/extend/plugins/rss/browse/new/' ); - $updated = fetch_feed( 'http://wordpress.org/extend/plugins/rss/browse/updated/' ); + ob_start(); + $check_urls = array( + 'http://wordpress.org/extend/plugins/rss/browse/popular/', + 'http://wordpress.org/extend/plugins/rss/browse/new/', + 'http://wordpress.org/extend/plugins/rss/browse/updated/' + ); + $transient_key = __FUNCTION__ . serialize( '' ) . implode( '|', $check_urls ); + + $popular = fetch_feed( $check_urls[0] ); + $new = fetch_feed( $check_urls[1] ); + $updated = fetch_feed( $check_urls[2] ); if ( false === $plugin_slugs = get_transient( 'plugin_slugs' ) ) { $plugin_slugs = array_keys( get_plugins() ); @@ -998,6 +1006,7 @@ function wp_dashboard_plugins_output() { $$feed->__destruct(); unset($$feed); } + set_transient( $transient_key, ob_get_flush() ); } /** @@ -1018,10 +1027,13 @@ function wp_dashboard_plugins_output() { function wp_dashboard_cached_rss_widget( $widget_id, $callback, $check_urls = array() ) { $loading = '

' . __( 'Loading…' ) . '

'; + $widgets = get_option( 'dashboard_widget_options' ); + $output_cache = 'dashboard_' . md5( $callback . serialize( isset( $widgets[$widget_id] ) ? $widgets[$widget_id] : '' ) . implode( '|', $check_urls ) ); + if ( empty($check_urls) ) { - $widgets = get_option( 'dashboard_widget_options' ); if ( empty($widgets[$widget_id]['url']) ) { echo $loading; + delete_transient( $output_cache ); return false; } $check_urls = array( $widgets[$widget_id]['url'] ); @@ -1032,10 +1044,19 @@ function wp_dashboard_cached_rss_widget( $widget_id, $callback, $check_urls = ar $cache = new WP_Feed_Cache_Transient('', md5($check_url), ''); if ( ! $cache->load() ) { echo $loading; + delete_transient( $output_cache ); return false; } } + if ( false === $cache = get_transient( $output_cache ) ) { + echo $loading; + return false; + } + + echo $cache; + return true; + /* if ( $callback && is_callable( $callback ) ) { $args = array_slice( func_get_args(), 2 ); array_unshift( $args, $widget_id ); @@ -1043,6 +1064,7 @@ function wp_dashboard_cached_rss_widget( $widget_id, $callback, $check_urls = ar } return true; + */ } /* Dashboard Widgets Controls */ diff --git a/wp-includes/default-widgets.php b/wp-includes/default-widgets.php index dc1c9ec880..81656a425e 100644 --- a/wp-includes/default-widgets.php +++ b/wp-includes/default-widgets.php @@ -713,7 +713,7 @@ class WP_Widget_RSS extends WP_Widget { return; // self-url destruction sequence - if ( $url == site_url() || $url == home_url() ) + if ( in_array( untrailingslashit( $url ), array( site_url(), home_url() ) ) ) return; $rss = fetch_feed($url);