WordPress.org

Make WordPress Core

Ticket #49464: 49464.3.patch

File 49464.3.patch, 3.4 KB (added by ayeshrajans, 7 months ago)

Tests: https://travis-ci.org/Ayesh/wordpress-develop/jobs/652822665

  • src/wp-includes/kses.php

    diff --git a/src/wp-includes/kses.php b/src/wp-includes/kses.php
    index d84fb6f837..6b0e9326ec 100644
    a b function wp_kses_hair( $attr, $allowed_protocols ) { 
    12481248
    12491249                switch ( $mode ) {
    12501250                        case 0:
    1251                                 if ( preg_match( '/^([-a-zA-Z:]+)/', $attr, $match ) ) {
     1251                                if ( preg_match( '/^([_a-zA-Z][-_a-zA-Z0-9:.]*)/', $attr, $match ) ) {
    12521252                                        $attrname = $match[1];
    12531253                                        $working  = 1;
    12541254                                        $mode     = 1;
    1255                                         $attr     = preg_replace( '/^[-a-zA-Z:]+/', '', $attr );
     1255                                        $attr     = preg_replace( '/^[_a-zA-Z][-_a-zA-Z0-9:.]*/', '', $attr );
    12561256                                }
    12571257
    12581258                                break;
    function wp_kses_hair_parse( $attr ) { 
    14381438
    14391439        // phpcs:disable Squiz.Strings.ConcatenationSpacing.PaddingFound -- don't remove regex indentation
    14401440        $regex =
    1441         '(?:'
    1442         .     '[-a-zA-Z:]+'   // Attribute name.
    1443         . '|'
    1444         .     '\[\[?[^\[\]]+\]\]?' // Shortcode in the name position implies unfiltered_html.
    1445         . ')'
    1446         . '(?:'               // Attribute value.
    1447         .     '\s*=\s*'       // All values begin with '='.
    1448         .     '(?:'
    1449         .         '"[^"]*"'   // Double-quoted.
    1450         .     '|'
    1451         .         "'[^']*'"   // Single-quoted.
    1452         .     '|'
    1453         .         '[^\s"\']+' // Non-quoted.
    1454         .         '(?:\s|$)'  // Must have a space.
    1455         .     ')'
    1456         . '|'
    1457         .     '(?:\s|$)'      // If attribute has no value, space is required.
    1458         . ')'
    1459         . '\s*';              // Trailing space is optional except as mentioned above.
     1441                '(?:'
     1442                .     '[_a-zA-Z][-_a-zA-Z0-9:.]*'   // Attribute name.
     1443                . '|'
     1444                .     '\[\[?[^\[\]]+\]\]?' // Shortcode in the name position implies unfiltered_html.
     1445                . ')'
     1446                . '(?:'               // Attribute value.
     1447                .     '\s*=\s*'       // All values begin with '='.
     1448                .     '(?:'
     1449                .         '"[^"]*"'   // Double-quoted.
     1450                .     '|'
     1451                .         "'[^']*'"   // Single-quoted.
     1452                .     '|'
     1453                .         '[^\s"\']+' // Non-quoted.
     1454                .         '(?:\s|$)'  // Must have a space.
     1455                .     ')'
     1456                . '|'
     1457                .     '(?:\s|$)'      // If attribute has no value, space is required.
     1458                . ')'
     1459                . '\s*';              // Trailing space is optional except as mentioned above.
    14601460        // phpcs:enable
    14611461
    14621462        // Although it is possible to reduce this procedure to a single regexp,
  • tests/phpunit/tests/kses.php

    diff --git a/tests/phpunit/tests/kses.php b/tests/phpunit/tests/kses.php
    index a74903bd80..d553349c04 100644
    a b function data_hair_parse() { 
    574574                                "array[1]='z'z'z'z",
    575575                                false,
    576576                        ),
     577                        // using digit in attribute name should work
     578                        array(
     579                                'href="https://example.com/[shortcode attr=\'value\']" data-op3-timer-seconds="0"',
     580                                array( 'href="https://example.com/[shortcode attr=\'value\']" ', 'data-op3-timer-seconds="0"' ),
     581                        ),
     582                        // using underscore in attribute name should work
     583                        array(
     584                                'href="https://example.com/[shortcode attr=\'value\']" data-op_timer-seconds="0"',
     585                                array( 'href="https://example.com/[shortcode attr=\'value\']" ', 'data-op_timer-seconds="0"' ),
     586                        ),
     587                        // using period in attribute name should work
     588                        array(
     589                                'href="https://example.com/[shortcode attr=\'value\']" data-op.timer-seconds="0"',
     590                                array( 'href="https://example.com/[shortcode attr=\'value\']" ', 'data-op.timer-seconds="0"' ),
     591                        ),
     592                        // using digit at a beginning of attribute name should return false
     593                        array(
     594                                'href="https://example.com/[shortcode attr=\'value\']" 3data-op-timer-seconds="0"',
     595                                false,
     596                        ),
    577597                );
    578598        }
    579599