WordPress.org

Make WordPress Core

Changeset 19976


Ignore:
Timestamp:
02/21/12 20:33:44 (2 years ago)
Author:
duck_
Message:

Reduce memory usage in wp-includes/kses.php by switching unnecessary empty arrays to boolean. Fixes #20017.

safecss_filter_attr() block for style tags must be moved out of the is_array() only branch of wp_kses_attr() to accommodate for this.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-includes/kses.php

    r19726 r19976  
    5252        'address' => array(), 
    5353        'a' => array( 
    54             'class' => array (), 
    55             'href' => array (), 
    56             'id' => array (), 
    57             'title' => array (), 
    58             'rel' => array (), 
    59             'rev' => array (), 
    60             'name' => array (), 
    61             'target' => array()), 
     54            'class' => true, 
     55            'href' => true, 
     56            'id' => true, 
     57            'title' => true, 
     58            'rel' => true, 
     59            'rev' => true, 
     60            'name' => true, 
     61            'target' => true, 
     62        ), 
    6263        'abbr' => array( 
    63             'class' => array (), 
    64             'title' => array ()), 
     64            'class' => true, 
     65            'title' => true, 
     66        ), 
    6567        'acronym' => array( 
    66             'title' => array ()), 
     68            'title' => true, 
     69        ), 
    6770        'article' => array( 
    68             'align' => array (), 
    69             'class' => array (), 
    70             'dir' => array (), 
    71             'lang' => array(), 
    72             'style' => array (), 
    73             'xml:lang' => array(), 
     71            'align' => true, 
     72            'class' => true, 
     73            'dir' => true, 
     74            'lang' => true, 
     75            'style' => true, 
     76            'xml:lang' => true, 
    7477        ), 
    7578        'aside' => array( 
    76             'align' => array (), 
    77             'class' => array (), 
    78             'dir' => array (), 
    79             'lang' => array(), 
    80             'style' => array (), 
    81             'xml:lang' => array(), 
     79            'align' => true, 
     80            'class' => true, 
     81            'dir' => true, 
     82            'lang' => true, 
     83            'style' => true, 
     84            'xml:lang' => true, 
    8285        ), 
    8386        'b' => array(), 
    8487        'big' => array(), 
    8588        'blockquote' => array( 
    86             'id' => array (), 
    87             'cite' => array (), 
    88             'class' => array(), 
    89             'lang' => array(), 
    90             'xml:lang' => array()), 
     89            'id' => true, 
     90            'cite' => true, 
     91            'class' => true, 
     92            'lang' => true, 
     93            'xml:lang' => true, 
     94        ), 
    9195        'br' => array ( 
    92             'class' => array ()), 
     96            'class' => true, 
     97        ), 
    9398        'button' => array( 
    94             'disabled' => array (), 
    95             'name' => array (), 
    96             'type' => array (), 
    97             'value' => array ()), 
     99            'disabled' => true, 
     100            'name' => true, 
     101            'type' => true, 
     102            'value' => true, 
     103        ), 
    98104        'caption' => array( 
    99             'align' => array (), 
    100             'class' => array ()), 
     105            'align' => true, 
     106            'class' => true, 
     107        ), 
    101108        'cite' => array ( 
    102             'class' => array(), 
    103             'dir' => array(), 
    104             'lang' => array(), 
    105             'title' => array ()), 
     109            'class' => true, 
     110            'dir' => true, 
     111            'lang' => true, 
     112            'title' => true, 
     113        ), 
    106114        'code' => array ( 
    107             'style' => array()), 
     115            'style' => true, 
     116        ), 
    108117        'col' => array( 
    109             'align' => array (), 
    110             'char' => array (), 
    111             'charoff' => array (), 
    112             'span' => array (), 
    113             'dir' => array(), 
    114             'style' => array (), 
    115             'valign' => array (), 
    116             'width' => array ()), 
     118            'align' => true, 
     119            'char' => true, 
     120            'charoff' => true, 
     121            'span' => true, 
     122            'dir' => true, 
     123            'style' => true, 
     124            'valign' => true, 
     125            'width' => true, 
     126        ), 
    117127        'del' => array( 
    118             'datetime' => array ()), 
     128            'datetime' => true, 
     129        ), 
    119130        'dd' => array(), 
    120131        'details' => array( 
    121             'align' => array (), 
    122             'class' => array (), 
    123             'dir' => array (), 
    124             'lang' => array(), 
    125             'open' => array (), 
    126             'style' => array (), 
    127             'xml:lang' => array(), 
     132            'align' => true, 
     133            'class' => true, 
     134            'dir' => true, 
     135            'lang' => true, 
     136            'open' => true, 
     137            'style' => true, 
     138            'xml:lang' => true, 
    128139        ), 
    129140        'div' => array( 
    130             'align' => array (), 
    131             'class' => array (), 
    132             'dir' => array (), 
    133             'lang' => array(), 
    134             'style' => array (), 
    135             'xml:lang' => array()), 
     141            'align' => true, 
     142            'class' => true, 
     143            'dir' => true, 
     144            'lang' => true, 
     145            'style' => true, 
     146            'xml:lang' => true, 
     147        ), 
    136148        'dl' => array(), 
    137149        'dt' => array(), 
     
    139151        'fieldset' => array(), 
    140152        'figure' => array( 
    141             'align' => array (), 
    142             'class' => array (), 
    143             'dir' => array (), 
    144             'lang' => array(), 
    145             'style' => array (), 
    146             'xml:lang' => array(), 
     153            'align' => true, 
     154            'class' => true, 
     155            'dir' => true, 
     156            'lang' => true, 
     157            'style' => true, 
     158            'xml:lang' => true, 
    147159        ), 
    148160        'figcaption' => array( 
    149             'align' => array (), 
    150             'class' => array (), 
    151             'dir' => array (), 
    152             'lang' => array(), 
    153             'style' => array (), 
    154             'xml:lang' => array(), 
     161            'align' => true, 
     162            'class' => true, 
     163            'dir' => true, 
     164            'lang' => true, 
     165            'style' => true, 
     166            'xml:lang' => true, 
    155167        ), 
    156168        'font' => array( 
    157             'color' => array (), 
    158             'face' => array (), 
    159             'size' => array ()), 
     169            'color' => true, 
     170            'face' => true, 
     171            'size' => true, 
     172        ), 
    160173        'footer' => array( 
    161             'align' => array (), 
    162             'class' => array (), 
    163             'dir' => array (), 
    164             'lang' => array(), 
    165             'style' => array (), 
    166             'xml:lang' => array(), 
     174            'align' => true, 
     175            'class' => true, 
     176            'dir' => true, 
     177            'lang' => true, 
     178            'style' => true, 
     179            'xml:lang' => true, 
    167180        ), 
    168181        'form' => array( 
    169             'action' => array (), 
    170             'accept' => array (), 
    171             'accept-charset' => array (), 
    172             'enctype' => array (), 
    173             'method' => array (), 
    174             'name' => array (), 
    175             'target' => array ()), 
     182            'action' => true, 
     183            'accept' => true, 
     184            'accept-charset' => true, 
     185            'enctype' => true, 
     186            'method' => true, 
     187            'name' => true, 
     188            'target' => true, 
     189        ), 
    176190        'h1' => array( 
    177             'align' => array (), 
    178             'class' => array (), 
    179             'id'    => array (), 
    180             'style' => array ()), 
     191            'align' => true, 
     192            'class' => true, 
     193            'id'    => true, 
     194            'style' => true, 
     195        ), 
    181196        'h2' => array ( 
    182             'align' => array (), 
    183             'class' => array (), 
    184             'id'    => array (), 
    185             'style' => array ()), 
     197            'align' => true, 
     198            'class' => true, 
     199            'id'    => true, 
     200            'style' => true, 
     201        ), 
    186202        'h3' => array ( 
    187             'align' => array (), 
    188             'class' => array (), 
    189             'id'    => array (), 
    190             'style' => array ()), 
     203            'align' => true, 
     204            'class' => true, 
     205            'id'    => true, 
     206            'style' => true, 
     207        ), 
    191208        'h4' => array ( 
    192             'align' => array (), 
    193             'class' => array (), 
    194             'id'    => array (), 
    195             'style' => array ()), 
     209            'align' => true, 
     210            'class' => true, 
     211            'id'    => true, 
     212            'style' => true, 
     213        ), 
    196214        'h5' => array ( 
    197             'align' => array (), 
    198             'class' => array (), 
    199             'id'    => array (), 
    200             'style' => array ()), 
     215            'align' => true, 
     216            'class' => true, 
     217            'id'    => true, 
     218            'style' => true, 
     219        ), 
    201220        'h6' => array ( 
    202             'align' => array (), 
    203             'class' => array (), 
    204             'id'    => array (), 
    205             'style' => array ()), 
     221            'align' => true, 
     222            'class' => true, 
     223            'id'    => true, 
     224            'style' => true, 
     225        ), 
    206226        'header' => array( 
    207             'align' => array (), 
    208             'class' => array (), 
    209             'dir' => array (), 
    210             'lang' => array(), 
    211             'style' => array (), 
    212             'xml:lang' => array(), 
     227            'align' => true, 
     228            'class' => true, 
     229            'dir' => true, 
     230            'lang' => true, 
     231            'style' => true, 
     232            'xml:lang' => true, 
    213233        ), 
    214234        'hgroup' => array( 
    215             'align' => array (), 
    216             'class' => array (), 
    217             'dir' => array (), 
    218             'lang' => array(), 
    219             'style' => array (), 
    220             'xml:lang' => array(), 
     235            'align' => true, 
     236            'class' => true, 
     237            'dir' => true, 
     238            'lang' => true, 
     239            'style' => true, 
     240            'xml:lang' => true, 
    221241        ), 
    222242        'hr' => array ( 
    223             'align' => array (), 
    224             'class' => array (), 
    225             'noshade' => array (), 
    226             'size' => array (), 
    227             'width' => array ()), 
     243            'align' => true, 
     244            'class' => true, 
     245            'noshade' => true, 
     246            'size' => true, 
     247            'width' => true, 
     248        ), 
    228249        'i' => array(), 
    229250        'img' => array( 
    230             'alt' => array (), 
    231             'align' => array (), 
    232             'border' => array (), 
    233             'class' => array (), 
    234             'height' => array (), 
    235             'hspace' => array (), 
    236             'longdesc' => array (), 
    237             'vspace' => array (), 
    238             'src' => array (), 
    239             'style' => array (), 
    240             'width' => array ()), 
     251            'alt' => true, 
     252            'align' => true, 
     253            'border' => true, 
     254            'class' => true, 
     255            'height' => true, 
     256            'hspace' => true, 
     257            'longdesc' => true, 
     258            'vspace' => true, 
     259            'src' => true, 
     260            'style' => true, 
     261            'width' => true, 
     262        ), 
    241263        'ins' => array( 
    242             'datetime' => array (), 
    243             'cite' => array ()), 
     264            'datetime' => true, 
     265            'cite' => true, 
     266        ), 
    244267        'kbd' => array(), 
    245268        'label' => array( 
    246             'for' => array ()), 
     269            'for' => true, 
     270        ), 
    247271        'legend' => array( 
    248             'align' => array ()), 
     272            'align' => true, 
     273        ), 
    249274        'li' => array ( 
    250             'align' => array (), 
    251             'class' => array ()), 
     275            'align' => true, 
     276            'class' => true, 
     277        ), 
    252278        'menu' => array ( 
    253             'class' => array (), 
    254             'style' => array (), 
    255             'type' => array ()), 
     279            'class' => true, 
     280            'style' => true, 
     281            'type' => true, 
     282        ), 
    256283        'nav' => array( 
    257             'align' => array (), 
    258             'class' => array (), 
    259             'dir' => array (), 
    260             'lang' => array(), 
    261             'style' => array (), 
    262             'xml:lang' => array(), 
     284            'align' => true, 
     285            'class' => true, 
     286            'dir' => true, 
     287            'lang' => true, 
     288            'style' => true, 
     289            'xml:lang' => true, 
    263290        ), 
    264291        'p' => array( 
    265             'class' => array (), 
    266             'align' => array (), 
    267             'dir' => array(), 
    268             'lang' => array(), 
    269             'style' => array (), 
    270             'xml:lang' => array()), 
     292            'class' => true, 
     293            'align' => true, 
     294            'dir' => true, 
     295            'lang' => true, 
     296            'style' => true, 
     297            'xml:lang' => true, 
     298        ), 
    271299        'pre' => array( 
    272             'style' => array(), 
    273             'width' => array ()), 
     300            'style' => true, 
     301            'width' => true, 
     302        ), 
    274303        'q' => array( 
    275             'cite' => array ()), 
     304            'cite' => true, 
     305        ), 
    276306        's' => array(), 
    277307        'span' => array ( 
    278             'class' => array (), 
    279             'dir' => array (), 
    280             'align' => array (), 
    281             'lang' => array (), 
    282             'style' => array (), 
    283             'title' => array (), 
    284             'xml:lang' => array()), 
     308            'class' => true, 
     309            'dir' => true, 
     310            'align' => true, 
     311            'lang' => true, 
     312            'style' => true, 
     313            'title' => true, 
     314            'xml:lang' => true, 
     315        ), 
    285316        'section' => array( 
    286             'align' => array (), 
    287             'class' => array (), 
    288             'dir' => array (), 
    289             'lang' => array(), 
    290             'style' => array (), 
    291             'xml:lang' => array(), 
     317            'align' => true, 
     318            'class' => true, 
     319            'dir' => true, 
     320            'lang' => true, 
     321            'style' => true, 
     322            'xml:lang' => true, 
    292323        ), 
    293324        'strike' => array(), 
     
    295326        'sub' => array(), 
    296327        'summary' => array( 
    297             'align' => array (), 
    298             'class' => array (), 
    299             'dir' => array (), 
    300             'lang' => array(), 
    301             'style' => array (), 
    302             'xml:lang' => array(), 
     328            'align' => true, 
     329            'class' => true, 
     330            'dir' => true, 
     331            'lang' => true, 
     332            'style' => true, 
     333            'xml:lang' => true, 
    303334        ), 
    304335        'sup' => array(), 
    305336        'table' => array( 
    306             'align' => array (), 
    307             'bgcolor' => array (), 
    308             'border' => array (), 
    309             'cellpadding' => array (), 
    310             'cellspacing' => array (), 
    311             'class' => array (), 
    312             'dir' => array(), 
    313             'id' => array(), 
    314             'rules' => array (), 
    315             'style' => array (), 
    316             'summary' => array (), 
    317             'width' => array ()), 
     337            'align' => true, 
     338            'bgcolor' => true, 
     339            'border' => true, 
     340            'cellpadding' => true, 
     341            'cellspacing' => true, 
     342            'class' => true, 
     343            'dir' => true, 
     344            'id' => true, 
     345            'rules' => true, 
     346            'style' => true, 
     347            'summary' => true, 
     348            'width' => true, 
     349        ), 
    318350        'tbody' => array( 
    319             'align' => array (), 
    320             'char' => array (), 
    321             'charoff' => array (), 
    322             'valign' => array ()), 
     351            'align' => true, 
     352            'char' => true, 
     353            'charoff' => true, 
     354            'valign' => true, 
     355        ), 
    323356        'td' => array( 
    324             'abbr' => array (), 
    325             'align' => array (), 
    326             'axis' => array (), 
    327             'bgcolor' => array (), 
    328             'char' => array (), 
    329             'charoff' => array (), 
    330             'class' => array (), 
    331             'colspan' => array (), 
    332             'dir' => array(), 
    333             'headers' => array (), 
    334             'height' => array (), 
    335             'nowrap' => array (), 
    336             'rowspan' => array (), 
    337             'scope' => array (), 
    338             'style' => array (), 
    339             'valign' => array (), 
    340             'width' => array ()), 
     357            'abbr' => true, 
     358            'align' => true, 
     359            'axis' => true, 
     360            'bgcolor' => true, 
     361            'char' => true, 
     362            'charoff' => true, 
     363            'class' => true, 
     364            'colspan' => true, 
     365            'dir' => true, 
     366            'headers' => true, 
     367            'height' => true, 
     368            'nowrap' => true, 
     369            'rowspan' => true, 
     370            'scope' => true, 
     371            'style' => true, 
     372            'valign' => true, 
     373            'width' => true, 
     374        ), 
    341375        'textarea' => array( 
    342             'cols' => array (), 
    343             'rows' => array (), 
    344             'disabled' => array (), 
    345             'name' => array (), 
    346             'readonly' => array ()), 
     376            'cols' => true, 
     377            'rows' => true, 
     378            'disabled' => true, 
     379            'name' => true, 
     380            'readonly' => true, 
     381        ), 
    347382        'tfoot' => array( 
    348             'align' => array (), 
    349             'char' => array (), 
    350             'class' => array (), 
    351             'charoff' => array (), 
    352             'valign' => array ()), 
     383            'align' => true, 
     384            'char' => true, 
     385            'class' => true, 
     386            'charoff' => true, 
     387            'valign' => true, 
     388        ), 
    353389        'th' => array( 
    354             'abbr' => array (), 
    355             'align' => array (), 
    356             'axis' => array (), 
    357             'bgcolor' => array (), 
    358             'char' => array (), 
    359             'charoff' => array (), 
    360             'class' => array (), 
    361             'colspan' => array (), 
    362             'headers' => array (), 
    363             'height' => array (), 
    364             'nowrap' => array (), 
    365             'rowspan' => array (), 
    366             'scope' => array (), 
    367             'valign' => array (), 
    368             'width' => array ()), 
     390            'abbr' => true, 
     391            'align' => true, 
     392            'axis' => true, 
     393            'bgcolor' => true, 
     394            'char' => true, 
     395            'charoff' => true, 
     396            'class' => true, 
     397            'colspan' => true, 
     398            'headers' => true, 
     399            'height' => true, 
     400            'nowrap' => true, 
     401            'rowspan' => true, 
     402            'scope' => true, 
     403            'valign' => true, 
     404            'width' => true, 
     405        ), 
    369406        'thead' => array( 
    370             'align' => array (), 
    371             'char' => array (), 
    372             'charoff' => array (), 
    373             'class' => array (), 
    374             'valign' => array ()), 
     407            'align' => true, 
     408            'char' => true, 
     409            'charoff' => true, 
     410            'class' => true, 
     411            'valign' => true, 
     412        ), 
    375413        'title' => array(), 
    376414        'tr' => array( 
    377             'align' => array (), 
    378             'bgcolor' => array (), 
    379             'char' => array (), 
    380             'charoff' => array (), 
    381             'class' => array (), 
    382             'style' => array (), 
    383             'valign' => array ()), 
     415            'align' => true, 
     416            'bgcolor' => true, 
     417            'char' => true, 
     418            'charoff' => true, 
     419            'class' => true, 
     420            'style' => true, 
     421            'valign' => true, 
     422        ), 
    384423        'tt' => array(), 
    385424        'u' => array(), 
    386425        'ul' => array ( 
    387             'class' => array (), 
    388             'style' => array (), 
    389             'type' => array ()), 
     426            'class' => true, 
     427            'style' => true, 
     428            'type' => true, 
     429        ), 
    390430        'ol' => array ( 
    391             'class' => array (), 
    392             'start' => array (), 
    393             'style' => array (), 
    394             'type' => array ()), 
    395         'var' => array ()); 
     431            'class' => true, 
     432            'start' => true, 
     433            'style' => true, 
     434            'type' => true, 
     435        ), 
     436        'var' => array(), 
     437    ); 
    396438 
    397439    /** 
     
    403445    $allowedtags = array( 
    404446        'a' => array( 
    405             'href' => array (), 
    406             'title' => array ()), 
     447            'href' => true, 
     448            'title' => true, 
     449        ), 
    407450        'abbr' => array( 
    408             'title' => array ()), 
     451            'title' => true, 
     452        ), 
    409453        'acronym' => array( 
    410             'title' => array ()), 
     454            'title' => true, 
     455        ), 
    411456        'b' => array(), 
    412457        'blockquote' => array( 
    413             'cite' => array ()), 
     458            'cite' => true, 
     459        ), 
    414460        //  'br' => array(), 
    415         'cite' => array (), 
     461        'cite' => array(), 
    416462        'code' => array(), 
    417463        'del' => array( 
    418             'datetime' => array ()), 
     464            'datetime' => true, 
     465        ), 
    419466        //  'dd' => array(), 
    420467        //  'dl' => array(), 
     
    426473        //  'p' => array(), 
    427474        'q' => array( 
    428             'cite' => array ()), 
     475            'cite' => true, 
     476        ), 
    429477        'strike' => array(), 
    430478        'strong' => array(), 
     
    675723            continue; # the attribute is not allowed 
    676724 
     725        if ( strtolower( $arreach['name'] ) == 'style' ) { 
     726            $orig_value = $arreach['value']; 
     727            $value = safecss_filter_attr( $orig_value ); 
     728 
     729            if ( empty( $value ) ) 
     730                continue; 
     731 
     732            $arreach['value'] = $value; 
     733            $arreach['whole'] = str_replace( $orig_value, $value, $arreach['whole'] ); 
     734        } 
     735 
    677736        if ( ! is_array($current) ) { 
    678737            $attr2 .= ' '.$arreach['whole']; 
     
    689748            } 
    690749 
    691             if ( strtolower($arreach['name']) == 'style' ) { 
    692                 $orig_value = $arreach['value']; 
    693                 $value = safecss_filter_attr($orig_value); 
    694  
    695                 if ( empty($value) ) 
    696                     continue; 
    697  
    698                 $arreach['value'] = $value; 
    699                 $arreach['whole'] = str_replace($orig_value, $value, $arreach['whole']); 
    700             } 
    701  
    702             if ($ok) 
     750            if ( $ok ) 
    703751                $attr2 .= ' '.$arreach['whole']; # it passed them 
    704752        } # if !is_array($current) 
Note: See TracChangeset for help on using the changeset viewer.