WordPress.org

Make WordPress Core

Ticket #6015: 6015.6.diff

File 6015.6.diff, 5.2 KB (added by DD32, 10 years ago)

Sanitize HTML & Error handling

  • wp-admin/includes/plugin-install.php

     
    3737
    3838        if ( ! $res ) {
    3939                $request = wp_remote_post('http://api.wordpress.org/plugins/info/1.0/', array( 'body' => array('action' => $action, 'request' => serialize($args))) );
    40                 $res = unserialize($request['body']);
    41                 if ( ! $res )
    42                         $res = new WP_Error('plugins_api_failed', __('An unknown error occured'), $request['body']);
     40                if ( is_wp_error($request) ) {
     41                        $res = new WP_Error('plugins_api_failed', __('An Unexpected HTTP Error occured during the API request.</p> <p><a href="?" onclick="document.location.reload(); return false;">Try again</a>'), $request->get_error_message() );
     42                } else {
     43                        $res = unserialize($request['body']);
     44                        if ( ! $res )
     45                                $res = new WP_Error('plugins_api_failed', __('An unknown error occured'), $request['body']);
     46                }
    4347        }
    4448
    4549        return apply_filters('plugins_api_result', $res, $action, $args);
     
    6266
    6367        $tags = plugins_api('hot_tags', $args);
    6468
     69        if ( is_wp_error($tags) )
     70                return $tags;
     71
    6572        $cache = (object) array('timeout' => time(), 'cached' => $tags);
    6673
    6774        update_option('wporg_popular_tags', $cache);
     
    100107
    101108        $api = plugins_api('query_plugins', $args);
    102109
     110        if ( is_wp_error($api) )
     111                wp_die($api);
     112
    103113        add_action('install_plugins_table_header', 'install_search_form');
    104114
    105115        display_plugins_table($api->plugins, $api->info['page'], $api->info['pages']);
     
    173183function install_featured($page = 1) {
    174184        $args = array('browse' => 'featured', 'page' => $page);
    175185        $api = plugins_api('query_plugins', $args);
     186        if ( is_wp_error($api) )
     187                wp_die($api);
    176188        display_plugins_table($api->plugins, $api->info['page'], $api->info['pages']);
    177189}
    178190
     
    201213function install_new($page = 1) {
    202214        $args = array('browse' => 'new', 'page' => $page);
    203215        $api = plugins_api('query_plugins', $args);
     216        if ( is_wp_error($api) )
     217                wp_die($api);
    204218        display_plugins_table($api->plugins, $api->info['page'], $api->info['pages']);
    205219}
    206220add_action('install_plugins_updated', 'install_updated', 10, 1);
     
    234248        $type = isset($_REQUEST['type']) ? $_REQUEST['type'] : '';
    235249        $term = isset($_REQUEST['s']) ? $_REQUEST['s'] : '';
    236250
    237         $plugins_allowedtags = array('a' => array('href' => array(),'title' => array(), 'target' => array()),'abbr' => array('title' => array()),'acronym' => array('title' => array()),'code' => array(),'em' => array(),'strong' => array());
     251        $plugins_allowedtags = array('a' => array('href' => array(),'title' => array(), 'target' => array()),
     252                                                                'abbr' => array('title' => array()),'acronym' => array('title' => array()),
     253                                                                'code' => array(),'em' => array(),'strong' => array());
    238254
    239255?>
    240256        <div class="tablenav">
     
    316332                                <td class="name"><?php echo $title; ?></td>
    317333                                <td class="vers"><?php echo $version; ?></td>
    318334                                <td class="vers">
    319                                         <div class="star-holder" title="<?php printf( __('based on %d ratings'), $plugin['num_ratings'] ); ?>">
     335                                        <div class="star-holder" title="<?php printf(__ngettext(__('based on %d rating'), __('based on %d ratings'), $plugin['num_ratings']), $plugin['num_ratings']) ?>">
    320336                                                <div class="star star-rating" style="width: <?php echo attribute_escape($plugin['rating']) ?>px"></div>
    321337                                                <div class="star star5"><img src="<?php echo admin_url('images/star.gif'); ?>" alt="<?php _e('5 stars') ?>" /></div>
    322338                                                <div class="star star4"><img src="<?php echo admin_url('images/star.gif'); ?>" alt="<?php _e('4 stars') ?>" /></div>
     
    355371
    356372        $api = plugins_api('plugin_information', array('slug' => $_REQUEST['plugin']));
    357373
     374        if ( is_wp_error($api) )
     375                wp_die($api);
     376
     377        $plugins_allowedtags = array('a' => array('href' => array(), 'title' => array(), 'target' => array()),
     378                                                                'abbr' => array('title' => array()), 'acronym' => array('title' => array()),
     379                                                                'code' => array(), 'em' => array(), 'strong' => array(), 'div' => array(),
     380                                                                'p' => array(), 'ul' => array(), 'ol' => array(), 'li' => array());
     381        //Sanitize HTML
     382        foreach ( (array)$api->sections as $section_name => $content )
     383                $api->sections[$section_name] = wp_kses($content, $plugins_allowedtags);
     384        foreach ( array('version', 'author', 'requires', 'tested', 'homepage', 'downloaded', 'slug') as $key )
     385                $api->$key = wp_kses($api->$key, $plugins_allowedtags);
     386
    358387        $section = isset($_REQUEST['section']) ? $_REQUEST['section'] : 'description'; //Default to the Description tab, Do not translate, API returns English.
    359388        if( empty($section) || ! isset($api->sections[ $section ]) )
    360389                $section = array_shift( $section_titles = array_keys((array)$api->sections) );
     
    521549
    522550        check_admin_referer('install-plugin_' . $plugin);
    523551        $api = plugins_api('plugin_information', array('slug' => $plugin, 'fields' => array('sections' => false) ) ); //Save on a bit of bandwidth.
     552       
     553        if ( is_wp_error($api) )
     554                wp_die($api);
    524555
    525556        echo '<div class="wrap">';
    526557        echo '<h2>', sprintf( __('Installing Plugin: %s'), $api->name . ' ' . $api->version ), '</h2>';
     
    834865        return  $folder . '/' . $pluginfiles[0];
    835866}
    836867
    837 
    838 
    839868?>