Make WordPress Core


Ignore:
Timestamp:
02/21/2012 08:33:44 PM (13 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.