WordPress.org

Make WordPress Core

Ticket #29807: 29807.diff

File 29807.diff, 3.8 KB (added by desrosj, 2 years ago)
  • src/wp-includes/kses.php

     
    239239                        'longdesc' => true,
    240240                        'vspace' => true,
    241241                        'src' => true,
     242                        'srcset' => true,
    242243                        'usemap' => true,
    243244                        'width' => true,
    244245                ),
     
    276277                        'lang' => true,
    277278                        'xml:lang' => true,
    278279                ),
     280                'picture' => array(),
    279281                'pre' => array(
    280282                        'width' => true,
    281283                ),
     
    297299                        'xml:lang' => true,
    298300                ),
    299301                'small' => array(),
     302                'source' => array(
     303                        'srcset' => true,
     304                        'type' => true,
     305                        'media' => true,
     306                        'sizes' => true,
     307                ),
    300308                'strike' => array(),
    301309                'strong' => array(),
    302310                'sub' => array(),
     
    918926        $attrarr = array();
    919927        $mode = 0;
    920928        $attrname = '';
    921         $uris = array('xmlns', 'profile', 'href', 'src', 'cite', 'classid', 'codebase', 'data', 'usemap', 'longdesc', 'action');
     929        $uris = array('xmlns', 'profile', 'href', 'src', 'srcset', 'sizes', 'cite', 'classid', 'codebase', 'data', 'usemap', 'longdesc', 'action');
    922930
    923931        // Loop through the whole attribute list
    924932
  • tests/phpunit/tests/kses.php

     
    7575                }
    7676        }
    7777
    78         function test_feed_links() {
     78        /**
     79         * @ticket 29807
     80         */
     81        function test_wp_filter_post_kses_img() {
     82                global $allowedposttags;
     83
     84                $attributes = array(
     85                        'class' => 'classname',
     86                        'id' => 'idattr',
     87                        'style' => 'color: red;',
     88                        'alt' => 'alt',
     89                        'src' => '/test.png',
     90                        'srcset' => '/test.png 2x',
     91                        'width' => '100',
     92                        'height' => '100',
     93                        'usemap' => '#hash',
     94                        'vspace' => '20',
     95                        'hspace' => '20',
     96                        'longdesc' => 'this is the longdesc',
     97                        'align' => 'middle',
     98                        'border' => '5',
     99                );
     100
     101                foreach ( $attributes as $name => $value ) {
     102                        if ( $name === $value ) {
     103                                $string = "<img $value />";
     104                                $expect_string = "<img " . trim( $value, ';' ) . " />";
     105                        } else {
     106                                $string = "<img $name='$value' />";
     107                                $expect_string = "<img $name='" . trim( $value, ';' ) . "' />";
     108                        }
     109
     110                        $this->assertEquals( $expect_string, wp_kses( $string, $allowedposttags ) );
     111                }
     112        }
     113
     114        /**
     115         * @ticket 29807
     116         */
     117        function test_wp_filter_post_kses_picture() {
    79118                global $allowedposttags;
    80119
     120                $html = '<picture><source srcset="pear-mobile.jpeg" media="(max-width: 720px)" type="image/png"><source srcset="pear-tablet.jpeg" media="(max-width: 1280px)" type="image/png"><img src="pear-desktop.jpeg" alt="The pear is juicy."></picture>';
     121                $this->assertEquals( $html, wp_kses( $html, $allowedposttags ) );
     122
     123                $html = '<picture><source srcset="https://wordpress.org/pear-mobile.jpeg" media="(max-width: 720px)" type="image/png"><source srcset="https://wordpress.org/pear-tablet.jpeg 500w, https://wordpress.org/pear-tablet.jpeg" media="(max-width: 1280px)" type="image/png"><img src="pear-desktop.jpeg" alt="The pear is juicy."></picture>';
     124                $this->assertEquals( $html, wp_kses( $html, $allowedposttags ) );
     125
     126                // Test bad protocol in srcset
     127                $original = '<picture><source srcset="bad://pear-mobile.jpeg" media="(max-width: 720px)" type="image/png"><source srcset="pear-tablet.jpeg" media="(max-width: 1280px)" type="image/png"><img src="pear-desktop.jpeg" alt="The pear is juicy."></picture>';
     128                $expected = '<picture><source srcset="//pear-mobile.jpeg" media="(max-width: 720px)" type="image/png"><source srcset="pear-tablet.jpeg" media="(max-width: 1280px)" type="image/png"><img src="pear-desktop.jpeg" alt="The pear is juicy."></picture>';
     129                $this->assertEquals( $expected, wp_kses( $original, $allowedposttags ) );
     130        }
     131
     132        function test_feed_links() {
     133                global $allowedposttags;
    81134                $content = <<<EOF
    82135<a href="feed:javascript:alert(1)">CLICK ME</a>
    83136<a href="feed:javascript:feed:alert(1)">CLICK ME</a>