From 6653002c215e90aac4bde7191df98e8851af3a7e Mon Sep 17 00:00:00 2001 From: Dennis Snell Date: Tue, 23 Jan 2024 01:49:06 +0000 Subject: [PATCH] HTML API: Support PARAM, SOURCE, and TRACK tags. Adds support for the following HTML elements to the HTML Processor: - PARAM, SOURCE, TRACK Previously these elements were not supported and the HTML Processor would bail when encountering them. Now, with this patch applied, it will proceed to parse an HTML document when encountering those tags. Props jonsurrell, dmsnell Fixes #60283 git-svn-id: https://develop.svn.wordpress.org/trunk@57326 602fd350-edb4-49c9-b593-d223f7449a82 --- .../html-api/class-wp-html-processor.php | 16 +++++++++++----- tests/phpunit/tests/html-api/wpHtmlProcessor.php | 4 +--- .../html-api/wpHtmlProcessorBreadcrumbs.php | 2 -- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/wp-includes/html-api/class-wp-html-processor.php b/src/wp-includes/html-api/class-wp-html-processor.php index 58d34b2833..f0c3b27b28 100644 --- a/src/wp-includes/html-api/class-wp-html-processor.php +++ b/src/wp-includes/html-api/class-wp-html-processor.php @@ -106,7 +106,7 @@ * - Heading elements: H1, H2, H3, H4, H5, H6, HGROUP. * - Links: A. * - Lists: DD, DL, DT, LI, OL, LI. - * - Media elements: AUDIO, CANVAS, EMBED, FIGCAPTION, FIGURE, IMG, MAP, PICTURE, VIDEO. + * - Media elements: AUDIO, CANVAS, EMBED, FIGCAPTION, FIGURE, IMG, MAP, PARAM, PICTURE, SOURCE, VIDEO, TRACK. * - Paragraph: BR, P. * - Phrasing elements: AREA, ABBR, BDI, BDO, CITE, DATA, DEL, DFN, INS, MARK, OUTPUT, Q, SAMP, SUB, SUP, TIME, VAR. * - Sectioning elements: ARTICLE, ASIDE, HR, NAV, SECTION. @@ -982,6 +982,15 @@ class WP_HTML_Processor extends WP_HTML_Tag_Processor { $this->insert_html_element( $this->state->current_token ); $this->state->frameset_ok = false; return true; + + /* + * > A start tag whose tag name is one of: "param", "source", "track" + */ + case '+PARAM': + case '+SOURCE': + case '+TRACK': + $this->insert_html_element( $this->state->current_token ); + return true; } /* @@ -1027,7 +1036,6 @@ class WP_HTML_Processor extends WP_HTML_Tag_Processor { case 'OBJECT': case 'OPTGROUP': case 'OPTION': - case 'PARAM': case 'PLAINTEXT': case 'RB': case 'RP': @@ -1036,7 +1044,6 @@ class WP_HTML_Processor extends WP_HTML_Tag_Processor { case 'SARCASM': case 'SCRIPT': case 'SELECT': - case 'SOURCE': case 'STYLE': case 'SVG': case 'TABLE': @@ -1049,7 +1056,6 @@ class WP_HTML_Processor extends WP_HTML_Tag_Processor { case 'THEAD': case 'TITLE': case 'TR': - case 'TRACK': case 'XMP': $this->last_error = self::ERROR_UNSUPPORTED; throw new WP_HTML_Unsupported_Exception( "Cannot process {$tag_name} element." ); @@ -1712,8 +1718,8 @@ class WP_HTML_Processor extends WP_HTML_Tag_Processor { 'HR' === $tag_name || 'IMG' === $tag_name || 'INPUT' === $tag_name || - 'LINK' === $tag_name || 'KEYGEN' === $tag_name || // Obsolete but still treated as void. + 'LINK' === $tag_name || 'META' === $tag_name || 'PARAM' === $tag_name || // Obsolete but still treated as void. 'SOURCE' === $tag_name || diff --git a/tests/phpunit/tests/html-api/wpHtmlProcessor.php b/tests/phpunit/tests/html-api/wpHtmlProcessor.php index 2e17b1a9a0..232fecebf8 100644 --- a/tests/phpunit/tests/html-api/wpHtmlProcessor.php +++ b/tests/phpunit/tests/html-api/wpHtmlProcessor.php @@ -206,6 +206,7 @@ class Tests_HtmlApi_WpHtmlProcessor extends WP_UnitTestCase { 'KEYGEN' => array( 'KEYGEN' ), 'LINK' => array( 'LINK' ), 'META' => array( 'META' ), + 'PARAM' => array( 'PARAM' ), 'SOURCE' => array( 'SOURCE' ), 'TRACK' => array( 'TRACK' ), 'WBR' => array( 'WBR' ), @@ -264,7 +265,6 @@ class Tests_HtmlApi_WpHtmlProcessor extends WP_UnitTestCase { 'OBJECT' => array( 'OBJECT' ), 'OPTGROUP' => array( 'OPTGROUP' ), 'OPTION' => array( 'OPTION' ), - 'PARAM' => array( 'PARAM' ), 'PLAINTEXT' => array( 'PLAINTEXT' ), 'RB' => array( 'RB' ), 'RP' => array( 'RP' ), @@ -273,7 +273,6 @@ class Tests_HtmlApi_WpHtmlProcessor extends WP_UnitTestCase { 'SARCASM' => array( 'SARCASM' ), 'SCRIPT' => array( 'SCRIPT' ), 'SELECT' => array( 'SELECT' ), - 'SOURCE' => array( 'SOURCE' ), 'STYLE' => array( 'STYLE' ), 'SVG' => array( 'SVG' ), 'TABLE' => array( 'TABLE' ), @@ -286,7 +285,6 @@ class Tests_HtmlApi_WpHtmlProcessor extends WP_UnitTestCase { 'THEAD' => array( 'THEAD' ), 'TITLE' => array( 'TITLE' ), 'TR' => array( 'TR' ), - 'TRACK' => array( 'TRACK' ), 'XMP' => array( 'XMP' ), ); } diff --git a/tests/phpunit/tests/html-api/wpHtmlProcessorBreadcrumbs.php b/tests/phpunit/tests/html-api/wpHtmlProcessorBreadcrumbs.php index 02098f2300..b9d567fbeb 100644 --- a/tests/phpunit/tests/html-api/wpHtmlProcessorBreadcrumbs.php +++ b/tests/phpunit/tests/html-api/wpHtmlProcessorBreadcrumbs.php @@ -199,7 +199,6 @@ class Tests_HtmlApi_WpHtmlProcessorBreadcrumbs extends WP_UnitTestCase { 'RTC', // Neutralized. 'SCRIPT', 'SELECT', - 'SOURCE', 'STYLE', 'SVG', 'TABLE', @@ -212,7 +211,6 @@ class Tests_HtmlApi_WpHtmlProcessorBreadcrumbs extends WP_UnitTestCase { 'THEAD', 'TITLE', 'TR', - 'TRACK', 'XMP', // Deprecated, use PRE instead. );