WordPress.org

Make WordPress Core

Ticket #20266: 20266.diff

File 20266.diff, 5.6 KB (added by nacin, 3 years ago)
  • wp-admin/includes/plugin.php

     
    6565 * @since 1.5.0 
    6666 * 
    6767 * @param string $plugin_file Path to the plugin file 
    68  * @param bool $markup If the returned data should have HTML markup applied 
    69  * @param bool $translate If the returned data should be translated 
     68 * @param bool $markup Optional. If the returned data should have HTML markup applied. Defaults to true. 
     69 * @param bool $translate Optional. If the returned data should be translated. Defaults to true. 
    7070 * @return array See above for description. 
    7171 */ 
    7272function get_plugin_data( $plugin_file, $markup = true, $translate = true ) { 
     
    8888        $plugin_data = get_file_data( $plugin_file, $default_headers, 'plugin' ); 
    8989 
    9090        // Site Wide Only is the old header for Network 
    91         if ( empty( $plugin_data['Network'] ) && ! empty( $plugin_data['_sitewide'] ) ) { 
     91        if ( ! $plugin_data['Network'] && $plugin_data['_sitewide'] ) { 
    9292                _deprecated_argument( __FUNCTION__, '3.0', sprintf( __( 'The <code>%1$s</code> plugin header is deprecated. Use <code>%2$s</code> instead.' ), 'Site Wide Only: true', 'Network: true' ) ); 
    9393                $plugin_data['Network'] = $plugin_data['_sitewide']; 
    9494        } 
    9595        $plugin_data['Network'] = ( 'true' == strtolower( $plugin_data['Network'] ) ); 
    9696        unset( $plugin_data['_sitewide'] ); 
    9797 
    98         //For backward compatibility by default Title is the same as Name. 
    99         $plugin_data['Title'] = $plugin_data['Name']; 
     98        // Sanitize, maybe markup, maybe translate 
     99        $plugin_data = _get_plugin_data_markup_translate( $plugin_file, $plugin_data, $markup, $translate ); 
    100100 
    101         if ( $markup || $translate ) 
    102                 $plugin_data = _get_plugin_data_markup_translate( $plugin_file, $plugin_data, $markup, $translate ); 
    103         else 
    104                 $plugin_data['AuthorName'] = $plugin_data['Author']; 
    105  
    106101        return $plugin_data; 
    107102} 
    108103 
    109 function _get_plugin_data_markup_translate($plugin_file, $plugin_data, $markup = true, $translate = true) { 
     104/** 
     105 * Sanitizes plugin data, optionally adds markup, optionally translates. 
     106 * 
     107 * @since 2.7.0 
     108 * @access private 
     109 * @see get_plugin_data() 
     110 */ 
     111function _get_plugin_data_markup_translate( $plugin_file, $plugin_data, $markup = true, $translate = true ) { 
    110112 
    111         //Translate fields 
     113        // Translate fields 
    112114        if ( $translate ) { 
    113115                if ( $textdomain = $plugin_data['TextDomain'] ) { 
    114                         if ( ! empty( $plugin_data['DomainPath'] ) ) 
     116                        if ( $plugin_data['DomainPath'] ) 
    115117                                load_plugin_textdomain( $textdomain, false, dirname( $plugin_file ) . $plugin_data['DomainPath'] ); 
    116118                        else 
    117119                                load_plugin_textdomain( $textdomain, false, dirname( $plugin_file ) ); 
     
    124126                } 
    125127        } 
    126128 
    127         $plugins_allowedtags = array( 
    128                 'a'       => array( 'href' => array(), 'title' => array() ), 
    129                 'abbr'    => array( 'title' => array() ), 
    130                 'acronym' => array( 'title' => array() ), 
    131                 'code'    => array(), 
    132                 'em'      => array(), 
    133                 'strong'  => array(), 
     129        $allowed_tags = $allowed_tags_in_links = array( 
     130                'abbr'    => array( 'title' => true ), 
     131                'acronym' => array( 'title' => true ), 
     132                'code'    => true, 
     133                'em'      => true, 
     134                'strong'  => true, 
    134135        ); 
     136        $allowed_tags['a'] = array( 'href' => true, 'title' => true ); 
    135137 
    136         $plugin_data['AuthorName'] = $plugin_data['Author'] = wp_kses( $plugin_data['Author'], $plugins_allowedtags ); 
     138        // Sanitized all displayed data. 
    137139 
    138         //Apply Markup 
     140        // Author and Name are marked up inside <a> tags. Don't allow these. 
     141        $plugin_data['Author']      = wp_kses( $plugin_data['Author'], $allowed_tags_in_links ); 
     142        $plugin_data['AuthorName']  = $plugin_data['Author']; 
     143 
     144        $plugin_data['Name']        = wp_kses( $plugin_data['Name'],   $allowed_tags_in_links ); 
     145        $plugin_data['Title']       = $plugin_data['Name']; 
     146 
     147        $plugin_data['Description'] = wp_kses( $plugin_data['Description'], $allowed_tags ); 
     148        $plugin_data['Version']     = wp_kses( $plugin_data['Version'],     $allowed_tags ); 
     149 
     150        $plugin_data['PluginURI']   = esc_url( $plugin_data['PluginURI'] ); 
     151        $plugin_data['AuthorURI']   = esc_url( $plugin_data['AuthorURI'] ); 
     152 
     153        // Apply markup 
    139154        if ( $markup ) { 
    140                 if ( ! empty($plugin_data['PluginURI']) && ! empty($plugin_data['Name']) ) 
     155                if ( $plugin_data['PluginURI'] && $plugin_data['Name'] ) 
    141156                        $plugin_data['Title'] = '<a href="' . $plugin_data['PluginURI'] . '" title="' . esc_attr__( 'Visit plugin homepage' ) . '">' . $plugin_data['Name'] . '</a>'; 
    142                 else 
    143                         $plugin_data['Title'] = $plugin_data['Name']; 
    144157 
    145                 if ( ! empty($plugin_data['AuthorURI']) && ! empty($plugin_data['Author']) ) 
     158                if ( $plugin_data['AuthorURI'] && $plugin_data['Author'] ) 
    146159                        $plugin_data['Author'] = '<a href="' . $plugin_data['AuthorURI'] . '" title="' . esc_attr__( 'Visit author homepage' ) . '">' . $plugin_data['Author'] . '</a>'; 
    147160 
    148161                $plugin_data['Description'] = wptexturize( $plugin_data['Description'] ); 
    149                 if ( ! empty($plugin_data['Author']) ) 
    150                         $plugin_data['Description'] .= ' <cite>' . sprintf( __('By %s'), $plugin_data['Author'] ) . '.</cite>'; 
     162 
     163                if ( $plugin_data['Author'] ) 
     164                        $plugin_data['Description'] .= ' <cite>' . sprintf( __('By %s.'), $plugin_data['Author'] ) . '</cite>'; 
    151165        } 
    152166 
    153         // Sanitize all displayed data. Author and AuthorName sanitized above. 
    154         $plugin_data['Title']       = wp_kses( $plugin_data['Title'],       $plugins_allowedtags ); 
    155         $plugin_data['Version']     = wp_kses( $plugin_data['Version'],     $plugins_allowedtags ); 
    156         $plugin_data['Description'] = wp_kses( $plugin_data['Description'], $plugins_allowedtags ); 
    157         $plugin_data['Name']        = wp_kses( $plugin_data['Name'],        $plugins_allowedtags ); 
    158  
    159167        return $plugin_data; 
    160168} 
    161169