Ticket #20210: 20210.5.diff

File 20210.5.diff, 13.4 KB (added by ryan, 8 months ago)
  • wp-includes/kses.php

     
    5151        $allowedposttags = array( 
    5252                'address' => array(), 
    5353                'a' => array( 
    54                         'class' => true, 
    5554                        'href' => true, 
    56                         'id' => true, 
    57                         'title' => true, 
    5855                        'rel' => true, 
    5956                        'rev' => true, 
    6057                        'name' => true, 
    6158                        'target' => true, 
    6259                ), 
    63                 'abbr' => array( 
    64                         'class' => true, 
    65                         'title' => true, 
     60                'abbr' => array(), 
     61                'acronym' => array(), 
     62                'area' => array( 
     63                        'alt' => true, 
     64                        'coords' => true, 
     65                        'href' => true, 
     66                        'nohref' => true, 
     67                        'shape' => true, 
     68                        'target' => true, 
    6669                ), 
    67                 'acronym' => array( 
    68                         'title' => true, 
    69                 ), 
    7070                'article' => array( 
    7171                        'align' => true, 
    72                         'class' => true, 
    7372                        'dir' => true, 
    7473                        'lang' => true, 
    75                         'style' => true, 
    7674                        'xml:lang' => true, 
    7775                ), 
    7876                'aside' => array( 
    7977                        'align' => true, 
    80                         'class' => true, 
    8178                        'dir' => true, 
    8279                        'lang' => true, 
    83                         'style' => true, 
    8480                        'xml:lang' => true, 
    8581                ), 
    8682                'b' => array(), 
    8783                'big' => array(), 
    8884                'blockquote' => array( 
    89                         'id' => true, 
    9085                        'cite' => true, 
    91                         'class' => true, 
    9286                        'lang' => true, 
    9387                        'xml:lang' => true, 
    9488                ), 
    95                 'br' => array ( 
    96                         'class' => true, 
    97                 ), 
     89                'br' => array (), 
    9890                'button' => array( 
    9991                        'disabled' => true, 
    10092                        'name' => true, 
     
    10395                ), 
    10496                'caption' => array( 
    10597                        'align' => true, 
    106                         'class' => true, 
    10798                ), 
    10899                'cite' => array ( 
    109                         'class' => true, 
    110100                        'dir' => true, 
    111101                        'lang' => true, 
    112                         'title' => true, 
    113102                ), 
    114                 'code' => array ( 
    115                         'style' => true, 
    116                 ), 
     103                'code' => array (), 
    117104                'col' => array( 
    118105                        'align' => true, 
    119106                        'char' => true, 
    120107                        'charoff' => true, 
    121108                        'span' => true, 
    122109                        'dir' => true, 
    123                         'style' => true, 
    124110                        'valign' => true, 
    125111                        'width' => true, 
    126112                ), 
     
    130116                'dd' => array(), 
    131117                'details' => array( 
    132118                        'align' => true, 
    133                         'class' => true, 
    134119                        'dir' => true, 
    135120                        'lang' => true, 
    136121                        'open' => true, 
    137                         'style' => true, 
    138122                        'xml:lang' => true, 
    139123                ), 
    140124                'div' => array( 
    141125                        'align' => true, 
    142                         'class' => true, 
    143126                        'dir' => true, 
    144127                        'lang' => true, 
    145                         'style' => true, 
    146128                        'xml:lang' => true, 
    147129                ), 
    148130                'dl' => array(), 
     
    151133                'fieldset' => array(), 
    152134                'figure' => array( 
    153135                        'align' => true, 
    154                         'class' => true, 
    155136                        'dir' => true, 
    156137                        'lang' => true, 
    157                         'style' => true, 
    158138                        'xml:lang' => true, 
    159139                ), 
    160140                'figcaption' => array( 
    161141                        'align' => true, 
    162                         'class' => true, 
    163142                        'dir' => true, 
    164143                        'lang' => true, 
    165                         'style' => true, 
    166144                        'xml:lang' => true, 
    167145                ), 
    168146                'font' => array( 
     
    172150                ), 
    173151                'footer' => array( 
    174152                        'align' => true, 
    175                         'class' => true, 
    176153                        'dir' => true, 
    177154                        'lang' => true, 
    178                         'style' => true, 
    179155                        'xml:lang' => true, 
    180156                ), 
    181157                'form' => array( 
     
    189165                ), 
    190166                'h1' => array( 
    191167                        'align' => true, 
    192                         'class' => true, 
    193                         'id'    => true, 
    194                         'style' => true, 
    195168                ), 
    196169                'h2' => array ( 
    197170                        'align' => true, 
    198                         'class' => true, 
    199                         'id'    => true, 
    200                         'style' => true, 
    201171                ), 
    202172                'h3' => array ( 
    203173                        'align' => true, 
    204                         'class' => true, 
    205                         'id'    => true, 
    206                         'style' => true, 
    207174                ), 
    208175                'h4' => array ( 
    209176                        'align' => true, 
    210                         'class' => true, 
    211                         'id'    => true, 
    212                         'style' => true, 
    213177                ), 
    214178                'h5' => array ( 
    215179                        'align' => true, 
    216                         'class' => true, 
    217                         'id'    => true, 
    218                         'style' => true, 
    219180                ), 
    220181                'h6' => array ( 
    221182                        'align' => true, 
    222                         'class' => true, 
    223                         'id'    => true, 
    224                         'style' => true, 
    225183                ), 
    226184                'header' => array( 
    227185                        'align' => true, 
    228                         'class' => true, 
    229186                        'dir' => true, 
    230187                        'lang' => true, 
    231                         'style' => true, 
    232188                        'xml:lang' => true, 
    233189                ), 
    234190                'hgroup' => array( 
    235191                        'align' => true, 
    236                         'class' => true, 
    237192                        'dir' => true, 
    238193                        'lang' => true, 
    239                         'style' => true, 
    240194                        'xml:lang' => true, 
    241195                ), 
    242196                'hr' => array ( 
    243197                        'align' => true, 
    244                         'class' => true, 
    245198                        'noshade' => true, 
    246199                        'size' => true, 
    247200                        'width' => true, 
    248201                ), 
    249                 'i' => array(), 
     202                'i' => array (), 
    250203                'img' => array( 
    251204                        'alt' => true, 
    252205                        'align' => true, 
    253206                        'border' => true, 
    254                         'class' => true, 
    255207                        'height' => true, 
    256208                        'hspace' => true, 
    257209                        'longdesc' => true, 
    258210                        'vspace' => true, 
    259211                        'src' => true, 
    260                         'style' => true, 
     212                        'usemap' => true, 
    261213                        'width' => true, 
    262214                ), 
    263215                'ins' => array( 
    264216                        'datetime' => true, 
    265217                        'cite' => true, 
    266218                ), 
    267                 'kbd' => array(), 
     219                'kbd' => array (), 
    268220                'label' => array( 
    269221                        'for' => true, 
    270222                ), 
     
    273225                ), 
    274226                'li' => array ( 
    275227                        'align' => true, 
    276                         'class' => true, 
    277228                ), 
     229                'map' => array( 
     230                        'name' => true, 
     231                ), 
    278232                'menu' => array ( 
    279                         'class' => true, 
    280                         'style' => true, 
    281233                        'type' => true, 
    282234                ), 
    283235                'nav' => array( 
    284236                        'align' => true, 
    285                         'class' => true, 
    286237                        'dir' => true, 
    287238                        'lang' => true, 
    288                         'style' => true, 
    289239                        'xml:lang' => true, 
    290240                ), 
    291241                'p' => array( 
    292                         'class' => true, 
    293242                        'align' => true, 
    294243                        'dir' => true, 
    295244                        'lang' => true, 
    296                         'style' => true, 
    297245                        'xml:lang' => true, 
    298246                ), 
    299247                'pre' => array( 
    300                         'style' => true, 
    301248                        'width' => true, 
    302249                ), 
    303250                'q' => array( 
     
    305252                ), 
    306253                's' => array(), 
    307254                'span' => array ( 
    308                         'class' => true, 
    309255                        'dir' => true, 
    310256                        'align' => true, 
    311257                        'lang' => true, 
    312                         'style' => true, 
    313                         'title' => true, 
    314258                        'xml:lang' => true, 
    315259                ), 
    316260                'section' => array( 
    317261                        'align' => true, 
    318                         'class' => true, 
    319262                        'dir' => true, 
    320263                        'lang' => true, 
    321                         'style' => true, 
    322264                        'xml:lang' => true, 
    323265                ), 
    324                 'small' => array(), 
    325                 'strike' => array(), 
    326                 'strong' => array(), 
    327                 'sub' => array(), 
     266                'small' => array (), 
     267                'strike' => array (), 
     268                'strong' => array (), 
     269                'sub' => array (), 
    328270                'summary' => array( 
    329271                        'align' => true, 
    330                         'class' => true, 
    331272                        'dir' => true, 
    332273                        'lang' => true, 
    333                         'style' => true, 
    334274                        'xml:lang' => true, 
    335275                ), 
    336                 'sup' => array(), 
     276                'sup' => array (), 
    337277                'table' => array( 
    338278                        'align' => true, 
    339279                        'bgcolor' => true, 
    340280                        'border' => true, 
    341281                        'cellpadding' => true, 
    342282                        'cellspacing' => true, 
    343                         'class' => true, 
    344283                        'dir' => true, 
    345                         'id' => true, 
    346284                        'rules' => true, 
    347                         'style' => true, 
    348285                        'summary' => true, 
    349286                        'width' => true, 
    350287                ), 
     
    361298                        'bgcolor' => true, 
    362299                        'char' => true, 
    363300                        'charoff' => true, 
    364                         'class' => true, 
    365301                        'colspan' => true, 
    366302                        'dir' => true, 
    367303                        'headers' => true, 
     
    369305                        'nowrap' => true, 
    370306                        'rowspan' => true, 
    371307                        'scope' => true, 
    372                         'style' => true, 
    373308                        'valign' => true, 
    374309                        'width' => true, 
    375310                ), 
     
    383318                'tfoot' => array( 
    384319                        'align' => true, 
    385320                        'char' => true, 
    386                         'class' => true, 
    387321                        'charoff' => true, 
    388322                        'valign' => true, 
    389323                ), 
     
    394328                        'bgcolor' => true, 
    395329                        'char' => true, 
    396330                        'charoff' => true, 
    397                         'class' => true, 
    398331                        'colspan' => true, 
    399332                        'headers' => true, 
    400333                        'height' => true, 
     
    408341                        'align' => true, 
    409342                        'char' => true, 
    410343                        'charoff' => true, 
    411                         'class' => true, 
    412344                        'valign' => true, 
    413345                ), 
    414346                'title' => array(), 
     
    417349                        'bgcolor' => true, 
    418350                        'char' => true, 
    419351                        'charoff' => true, 
    420                         'class' => true, 
    421                         'style' => true, 
    422352                        'valign' => true, 
    423353                ), 
    424                 'tt' => array(), 
    425                 'u' => array(), 
     354                'tt' => array (), 
     355                'u' => array (), 
    426356                'ul' => array ( 
    427                         'class' => true, 
    428                         'style' => true, 
    429357                        'type' => true, 
    430358                ), 
    431359                'ol' => array ( 
    432                         'class' => true, 
    433360                        'start' => true, 
    434                         'style' => true, 
    435361                        'type' => true, 
    436362                ), 
    437363                'var' => array(), 
     
    526452                'sdot',    'lceil',  'rceil',   'lfloor', 'rfloor', 'lang', 
    527453                'rang',    'loz',    'spades',  'clubs',  'hearts', 'diams', 
    528454        ); 
     455 
     456        $allowedposttags = array_map( '_wp_add_global_attributes', $allowedposttags ); 
     457} else { 
     458        $allowedtags = wp_kses_array_lc( $allowedtags ); 
     459        $allowedposttags = wp_kses_array_lc( $allowedposttags ); 
    529460} 
    530461 
    531462/** 
     
    554485        $string = wp_kses_no_null($string); 
    555486        $string = wp_kses_js_entities($string); 
    556487        $string = wp_kses_normalize_entities($string); 
    557         $allowed_html_fixed = wp_kses_array_lc($allowed_html); 
    558         $string = wp_kses_hook($string, $allowed_html_fixed, $allowed_protocols); // WP changed the order of these funcs and added args to wp_kses_hook 
    559         return wp_kses_split($string, $allowed_html_fixed, $allowed_protocols); 
     488        $string = wp_kses_hook($string, $allowed_html, $allowed_protocols); // WP changed the order of these funcs and added args to wp_kses_hook 
     489        return wp_kses_split($string, $allowed_html, $allowed_protocols); 
    560490} 
    561491 
    562492/** 
     493 * Return a list of allowed tags and attributes for a given context. 
     494 * 
     495 * @since 3.5.0 
     496 * 
     497 * @param string $context The context for which to retrieve tags. Allowed values are 
     498 *  post | strip | data | entities or the name of a field filter such as pre_user_description. 
     499 * @return array List of allowed tags and their allowed attributes. 
     500 */ 
     501function wp_kses_allowed_html( $context = '' ) { 
     502        global $allowedposttags, $allowedtags, $allowedentitynames; 
     503 
     504        if ( is_array( $context ) ) 
     505                return apply_filters( 'wp_kses_allowed_html', $context, 'explicit' ); 
     506 
     507        switch ( $context ) { 
     508                case 'post': 
     509                        return apply_filters( 'wp_kses_allowed_html', $allowedposttags, $context ); 
     510                        break; 
     511                case 'user_description': 
     512                case 'pre_user_description': 
     513                        $tags = $allowedtags; 
     514                        $tags['a']['rel'] = true; 
     515                        return apply_filters( 'wp_kses_allowed_html', $tags, $context ); 
     516                        break; 
     517                case 'strip': 
     518                        return apply_filters( 'wp_kses_allowed_html', array(), $context ); 
     519                        break; 
     520                case 'entities': 
     521                        return apply_filters( 'wp_kses_allowed_html', $allowedentitynames, $context); 
     522                        break; 
     523                case 'data': 
     524                default: 
     525                        return apply_filters( 'wp_kses_allowed_html', $allowedtags, $context ); 
     526        } 
     527} 
     528 
     529/** 
    563530 * You add any kses hooks here. 
    564531 * 
    565532 * There is currently only one kses WordPress hook and it is called here. All 
     
    572539 * @param array $allowed_protocols Allowed protocol in links 
    573540 * @return string Filtered content through 'pre_kses' hook 
    574541 */ 
    575 function wp_kses_hook($string, $allowed_html, $allowed_protocols) { 
     542function wp_kses_hook( $string, $allowed_html, $allowed_protocols ) { 
    576543        $string = apply_filters('pre_kses', $string, $allowed_html, $allowed_protocols); 
    577544        return $string; 
    578545} 
     
    600567 * @param array $allowed_protocols Allowed protocols to keep 
    601568 * @return string Content with fixed HTML tags 
    602569 */ 
    603 function wp_kses_split($string, $allowed_html, $allowed_protocols) { 
     570function wp_kses_split( $string, $allowed_html, $allowed_protocols ) { 
    604571        global $pass_allowed_html, $pass_allowed_protocols; 
    605572        $pass_allowed_html = $allowed_html; 
    606573        $pass_allowed_protocols = $allowed_protocols; 
     
    668635        $elem = $matches[2]; 
    669636        $attrlist = $matches[3]; 
    670637 
     638        if ( ! is_array( $allowed_html ) ) 
     639                $allowed_html = wp_kses_allowed_html( $allowed_html ); 
     640 
    671641        if ( ! isset($allowed_html[strtolower($elem)]) ) 
    672642                return ''; 
    673643        # They are using a not allowed HTML element 
     
    699669function wp_kses_attr($element, $attr, $allowed_html, $allowed_protocols) { 
    700670        # Is there a closing XHTML slash at the end of the attributes? 
    701671 
     672        if ( ! is_array( $allowed_html ) ) 
     673                $allowed_html = wp_kses_allowed_html( $allowed_html ); 
     674 
    702675        $xhtml_slash = ''; 
    703676        if (preg_match('%\s*/\s*$%', $attr)) 
    704677                $xhtml_slash = ' /'; 
     
    12861259 * @param string $data Content to filter, expected to be escaped with slashes 
    12871260 * @return string Filtered content 
    12881261 */ 
    1289 function wp_filter_kses($data) { 
    1290         global $allowedtags; 
    1291         return addslashes( wp_kses(stripslashes( $data ), $allowedtags) ); 
     1262function wp_filter_kses( $data ) { 
     1263        return addslashes( wp_kses( stripslashes( $data ), current_filter() ) ); 
    12921264} 
    12931265 
    12941266/** 
     
    13001272 * @param string $data Content to filter, expected to not be escaped 
    13011273 * @return string Filtered content 
    13021274 */ 
    1303 function wp_kses_data($data) { 
    1304         global $allowedtags; 
    1305         return wp_kses( $data , $allowedtags ); 
     1275function wp_kses_data( $data ) { 
     1276        return wp_kses( $data , current_filter() ); 
    13061277} 
    13071278 
    13081279/** 
     
    13121283 * data from forms. 
    13131284 * 
    13141285 * @since 2.0.0 
    1315  * @uses $allowedposttags 
    13161286 * 
    13171287 * @param string $data Post content to filter, expected to be escaped with slashes 
    13181288 * @return string Filtered post content with allowed HTML tags and attributes intact. 
    13191289 */ 
    13201290function wp_filter_post_kses($data) { 
    1321         global $allowedposttags; 
    1322         return addslashes ( wp_kses(stripslashes( $data ), $allowedposttags) ); 
     1291        return addslashes ( wp_kses( stripslashes( $data ), 'post' ) ); 
    13231292} 
    13241293 
    13251294/** 
     
    13291298 * data from forms. 
    13301299 * 
    13311300 * @since 2.9.0 
    1332  * @uses $allowedposttags 
    13331301 * 
    13341302 * @param string $data Post content to filter 
    13351303 * @return string Filtered post content with allowed HTML tags and attributes intact. 
    13361304 */ 
    13371305function wp_kses_post($data) { 
    1338         global $allowedposttags; 
    1339         return wp_kses( $data , $allowedposttags ); 
     1306        return wp_kses( $data , 'post' ); 
    13401307} 
    13411308 
    13421309/** 
     
    13471314 * @param string $data Content to strip all HTML from 
    13481315 * @return string Filtered content without any HTML 
    13491316 */ 
    1350 function wp_filter_nohtml_kses($data) { 
    1351         return addslashes ( wp_kses(stripslashes( $data ), array()) ); 
     1317function wp_filter_nohtml_kses( $data ) { 
     1318        return addslashes ( wp_kses( stripslashes( $data ), 'strip' ) ); 
    13521319} 
    13531320 
    13541321/** 
     
    14841451 
    14851452        return $css; 
    14861453} 
     1454 
     1455/** 
     1456 * Helper function to add global attributes to a tag in the allowed html list. 
     1457 * 
     1458 * @since 3.5.0 
     1459 * @access private 
     1460 * 
     1461 * @param array $value An array of attributes. 
     1462 * @return array The array of attributes with global attributes added. 
     1463 */ 
     1464function _wp_add_global_attributes( $value ) { 
     1465        $global_attributes = array( 
     1466                'class' => true, 
     1467                'id' => true, 
     1468                'style' => true, 
     1469                'title' => true, 
     1470        ); 
     1471 
     1472        if ( true === $value ) 
     1473                $value = array(); 
     1474 
     1475        if ( is_array( $value ) ) 
     1476                return array_merge( $value, $global_attributes ); 
     1477 
     1478        return $value; 
     1479}