Make WordPress Core

Ticket #58637: 58637.patch

File 58637.patch, 2.8 KB (added by dmsnell, 11 months ago)
  • src/wp-includes/html-api/class-wp-html-tag-processor.php

    diff --git a/src/wp-includes/html-api/class-wp-html-tag-processor.php b/src/wp-includes/html-api/class-wp-html-tag-processor.php
    index 9b0957c144..4f635da148 100644
    a b class WP_HTML_Tag_Processor { 
    546546                        }
    547547
    548548                        // Ensure that the tag closes before the end of the document.
     549                        if ( $this->bytes_already_parsed >= strlen( $this->html ) ) {
     550                                return false;
     551                        }
    549552                        $tag_ends_at = strpos( $this->html, '>', $this->bytes_already_parsed );
    550553                        if ( false === $tag_ends_at ) {
    551554                                return false;
  • tests/phpunit/tests/html-api/wpHtmlTagProcessor.php

    diff --git a/tests/phpunit/tests/html-api/wpHtmlTagProcessor.php b/tests/phpunit/tests/html-api/wpHtmlTagProcessor.php
    index e84fc777de..6cc59289cb 100644
    a b HTML; 
    20382038                );
    20392039        }
    20402040
     2041        /**
     2042         * @ticket 58637
     2043         *
     2044         * @covers WP_HTML_Tag_Processor::next_tag
     2045         *
     2046         * @dataProvider data_incomplete_syntax_elements
     2047         *
     2048         * @param string $incomplete_html HTML text containing some kind of incomplete syntax.
     2049         */
     2050        public function test_returns_false_for_incomplete_syntax_elements( $incomplete_html ) {
     2051                $p = new WP_HTML_Tag_Processor( $incomplete_html );
     2052                $this->assertFalse( $p->next_tag() );
     2053        }
     2054
     2055        /**
     2056         * Data provider.
     2057         *
     2058         * @return array[]
     2059         */
     2060        public function data_incomplete_syntax_elements() {
     2061                return array(
     2062                        'No tags'                              => array( 'this is nothing more than a text node' ),
     2063                        'Incomplete tag name'                  => array( '<swit' ),
     2064                        'Incomplete tag (no attributes)'       => array( '<div' ),
     2065                        'Incomplete tag (attributes)'          => array( '<div inert title="test"' ),
     2066                        'Incomplete attribute (unquoted)'      => array( '<button disabled' ),
     2067                        'Incomplete attribute (single quoted)' => array( "<li class='just-another class" ),
     2068                        'Incomplete attribute (double quoted)' => array( '<iframe src="https://www.example.com/embed/abcdef' ),
     2069                        'Incomplete comment (normative)'       => array( '<!-- without end' ),
     2070                        'Incomplete comment (missing --)'      => array( '<!-- without end --' ),
     2071                        'Incomplete comment (--!)'             => array( '<!-- without end --!' ),
     2072                        'Incomplete comment (bogus comment)'   => array( '</3 is not a tag' ),
     2073                        'Incomplete DOCTYPE'                   => array( '<!DOCTYPE html' ),
     2074                        'Partial DOCTYPE'                      => array( '<!DOCTY' ),
     2075                        'Incomplete CDATA'                     => array( '<[CDATA[something inside of here needs to get out' ),
     2076                        'Partial CDATA'                        => array( '<[CDA' ),
     2077                        'Partially closed CDATA]'              => array( '<[CDATA[cannot escape]' ),
     2078                        'Partially closed CDATA]>'             => array( '<[CDATA[cannot escape]>' ),
     2079                );
     2080        }
     2081
    20412082        /**
    20422083         * @ticket 56299
    20432084         *