Index: wp-admin/includes/plugin-install.php
===================================================================
--- wp-admin/includes/plugin-install.php	(revision 12605)
+++ wp-admin/includes/plugin-install.php	(working copy)
@@ -24,7 +24,7 @@
  *
  * @param string $action
  * @param array|object $args Optional. Arguments to serialize for the Plugin Info API.
- * @return mixed
+ * @return mixed plugins_api response object, WP_Error on error, mixed values  
  */
 function plugins_api($action, $args = null) {
 
@@ -34,19 +34,18 @@
 	if ( !isset($args->per_page) )
 		$args->per_page = 24;
 
-	$args = apply_filters('plugins_api_args', $args, $action); //NOTE: Ensure that an object is returned via this filter.
-	$res = apply_filters('plugins_api', false, $action, $args); //NOTE: Allows a plugin to completely override the builtin WordPress.org API.
+	$args = apply_filters('plugins_api_args', $args, $action);   //NOTE: Ensure that an object is returned via this filter.
+	$res  = apply_filters('plugins_api', false, $action, $args); //NOTE: Allows a plugin to completely override the builtin WordPress.org API.
 
-	if ( ! $res ) {
-		$request = wp_remote_post('http://api.wordpress.org/plugins/info/1.0/', array( 'body' => array('action' => $action, 'request' => serialize($args))) );
+	if ( false === $res ) {
+		$request = wp_remote_post('http://api.wordpress.org/plugins/info/1.0/', array( 'timeout' => 15, 'body' => array('action' => $action, 'request' => serialize($args))) );
 		if ( is_wp_error($request) ) {
 			$res = new WP_Error('plugins_api_failed', __('An Unexpected HTTP Error occurred during the API request.</p> <p><a href="?" onclick="document.location.reload(); return false;">Try again</a>'), $request->get_error_message() );
-		} else {
-			$res = unserialize($request['body']);
-			if ( ! $res )
-				$res = new WP_Error('plugins_api_failed', __('An unknown error occurred'), $request['body']);
+		} elseif ( false === ( $res = unserialize( $request['body'] ) ) ) {
+			$res = new WP_Error('plugins_api_failed', __('An unknown error occurred'), $request['body']);
 		}
-	} elseif ( !is_wp_error($res) ) {
+	} elseif ( !is_wp_error( $res ) ) {
+		$res = (object) $res;
 		$res->external = true;
 	}
 
@@ -197,6 +196,8 @@
 function install_popular($page = 1) {
 	$args = array('browse' => 'popular', 'page' => $page);
 	$api = plugins_api('query_plugins', $args);
+	if ( is_wp_error($api) )
+		wp_die($api);
 	display_plugins_table($api->plugins, $api->info['page'], $api->info['pages']);
 }
 
@@ -248,6 +249,8 @@
 function install_updated($page = 1) {
 	$args = array('browse' => 'updated', 'page' => $page);
 	$api = plugins_api('query_plugins', $args);
+	if ( is_wp_error($api) )
+		wp_die($api);
 	display_plugins_table($api->plugins, $api->info['page'], $api->info['pages']);
 }
 
