WordPress.org

Make WordPress Core

Ticket #6602: bug6602.patch

File bug6602.patch, 3.0 KB (added by schiller, 7 years ago)

Updated patch to take first attribute and ignore later duplicate attributes (per Sam Ruby's comment)

  • kses.php

     
    531531 * input. It will add quotes around attribute values that don't have any quotes 
    532532 * or apostrophes around them, to make it easier to produce HTML code that will 
    533533 * conform to W3C's HTML specification. It will also remove bad URL protocols 
    534  * from attribute values. 
     534 * from attribute values.  It also reduces duplicate attributes by using the 
     535 * attribute defined first (foo='bar' foo='baz' will result in foo='bar'). 
    535536 * 
    536537 * @since 1.0.0 
    537538 * 
     
    574575                                        { 
    575576                                        $working = 1; 
    576577                                        $mode = 0; 
    577                                         $attrarr[] = array ('name' => $attrname, 'value' => '', 'whole' => $attrname, 'vless' => 'y'); 
     578                                        if(FALSE === array_key_exists($attrname, $attrarr)) { 
     579                                                $attrarr[$attrname] = array ('name' => $attrname, 'value' => '', 'whole' => $attrname, 'vless' => 'y'); 
     580                                        } 
    578581                                        $attr = preg_replace('/^\s+/', '', $attr); 
    579582                                } 
    580583 
     
    587590                                        { 
    588591                                        $thisval = wp_kses_bad_protocol($match[1], $allowed_protocols); 
    589592 
    590                                         $attrarr[] = array ('name' => $attrname, 'value' => $thisval, 'whole' => "$attrname=\"$thisval\"", 'vless' => 'n'); 
     593                                        if(FALSE === array_key_exists($attrname, $attrarr)) { 
     594                                                $attrarr[$attrname] = array ('name' => $attrname, 'value' => $thisval, 'whole' => "$attrname=\"$thisval\"", 'vless' => 'n'); 
     595                                        } 
    591596                                        $working = 1; 
    592597                                        $mode = 0; 
    593598                                        $attr = preg_replace('/^"[^"]*"(\s+|$)/', '', $attr); 
     
    599604                                        { 
    600605                                        $thisval = wp_kses_bad_protocol($match[1], $allowed_protocols); 
    601606 
    602                                         $attrarr[] = array ('name' => $attrname, 'value' => $thisval, 'whole' => "$attrname='$thisval'", 'vless' => 'n'); 
     607                                        if(FALSE === array_key_exists($attrname, $attrarr)) { 
     608                                                $attrarr[$attrname] = array ('name' => $attrname, 'value' => $thisval, 'whole' => "$attrname='$thisval'", 'vless' => 'n'); 
     609                                        } 
    603610                                        $working = 1; 
    604611                                        $mode = 0; 
    605612                                        $attr = preg_replace("/^'[^']*'(\s+|$)/", '', $attr); 
     
    611618                                        { 
    612619                                        $thisval = wp_kses_bad_protocol($match[1], $allowed_protocols); 
    613620 
    614                                         $attrarr[] = array ('name' => $attrname, 'value' => $thisval, 'whole' => "$attrname=\"$thisval\"", 'vless' => 'n'); 
     621                                        if(FALSE === array_key_exists($attrname, $attrarr)) { 
     622                                                $attrarr[$attrname] = array ('name' => $attrname, 'value' => $thisval, 'whole' => "$attrname=\"$thisval\"", 'vless' => 'n'); 
     623                                        } 
    615624                                        # We add quotes to conform to W3C's HTML spec. 
    616625                                        $working = 1; 
    617626                                        $mode = 0; 
     
    628637                } 
    629638        } # while 
    630639 
    631         if ($mode == 1) 
     640        if ($mode == 1 && FALSE === array_key_exists($attrname, $attrarr)) { 
    632641                # special case, for when the attribute list ends with a valueless 
    633642                # attribute like "selected" 
    634                 $attrarr[] = array ('name' => $attrname, 'value' => '', 'whole' => $attrname, 'vless' => 'y'); 
     643                $attrarr[$attrname] = array ('name' => $attrname, 'value' => '', 'whole' => $attrname, 'vless' => 'y'); 
    635644 
    636645        return $attrarr; 
    637646}