Make WordPress Core


Ignore:
Timestamp:
11/27/2024 09:55:53 AM (22 months ago)
Author:
cbravobernal
Message:

HTML API: Recognize all uppercase tag names in tag processor.

Fixes a missing "D" in the character list used by strspn to find tag openers, causing tags starting with D to be skipped by the tag processor in some circumstances.

Follow-up to [58613].

Props jonsurrell, santosguillamot, wongjn, cbravobernal.
Fixes #62522.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tests/phpunit/tests/html-api/wpHtmlTagProcessor.php

    r58969 r59464  
    29852985                $this->assertNull( $doctype->system_identifier );
    29862986        }
     2987
     2988        /**
     2989         * @ticket 62522
     2990         *
     2991         * @dataProvider data_alphabet_by_characters_lowercase
     2992         */
     2993        public function test_recognizes_lowercase_tag_name( string $char ) {
     2994                /*
     2995                 * The spacing in the HTML string is important to the problematic
     2996                 * codepath in ticket #62522.
     2997                 */
     2998                $html      = " <{$char}> </{$char}>";
     2999                $processor = new WP_HTML_Tag_Processor( $html );
     3000                $this->assertTrue( $processor->next_tag(), "Failed to find open tag in '{$html}'." );
     3001                $this->assertTrue(
     3002                        $processor->next_tag( array( 'tag_closers' => 'visit' ) ),
     3003                        "Failed to find close tag in '{$html}'."
     3004                );
     3005        }
     3006
     3007        /**
     3008         * @ticket 62522
     3009         *
     3010         * @dataProvider data_alphabet_by_characters_uppercase
     3011         */
     3012        public function test_recognizes_uppercase_tag_name( string $char ) {
     3013                /*
     3014                 * The spacing in the HTML string is important to the problematic
     3015                 * codepath in ticket #62522.
     3016                 */
     3017                $html      = " <{$char}> </{$char}>";
     3018                $processor = new WP_HTML_Tag_Processor( $html );
     3019                $this->assertTrue( $processor->next_tag(), "Failed to find open tag in '{$html}'." );
     3020                $this->assertTrue(
     3021                        $processor->next_tag( array( 'tag_closers' => 'visit' ) ),
     3022                        "Failed to find close tag in '{$html}'."
     3023                );
     3024        }
     3025
     3026        /**
     3027         * Data provider.
     3028         *
     3029         * @return Generator<array>
     3030         */
     3031        public static function data_alphabet_by_characters_lowercase() {
     3032                $char = 'a';
     3033                while ( $char <= 'z' ) {
     3034                        yield $char => array( $char );
     3035                        $char = chr( ord( $char ) + 1 );
     3036                }
     3037        }
     3038
     3039        /**
     3040         * Data provider.
     3041         *
     3042         * @return Generator<array>
     3043         */
     3044        public static function data_alphabet_by_characters_uppercase() {
     3045                foreach ( self::data_alphabet_by_characters_lowercase() as $data ) {
     3046                        yield strtoupper( $data[0] ) => array( strtoupper( $data[0] ) );
     3047                }
     3048        }
    29873049}
Note: See TracChangeset for help on using the changeset viewer.