From c67fe4b6e5f3f22bb4daa069909ec8a81c5898f0 Mon Sep 17 00:00:00 2001 From: Bernhard Reiter Date: Wed, 30 Aug 2023 15:39:16 +0000 Subject: [PATCH] HTML API: Stop processing HTML when encountering unsupported markup. It was a design goal of the HTML Processor to abort processing its input document when encountering unsupported markup. Unfortunately there was no test for this and so-far, the HTML Processor has paused, but continued processing in these situations. In this patch a new test ensures that the HTML Processor stops and refuses to move forward after encountering any unsupported markup. It also ensures that it doesn't report any current tag names since unsupported markup could imply that the read tag name is different than the parsed tag name. Props dmsnell. Fixes #59167. Built from https://develop.svn.wordpress.org/trunk@56493 git-svn-id: http://core.svn.wordpress.org/trunk@56005 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-includes/html-api/class-wp-html-processor.php | 9 +++++++++ wp-includes/version.php | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/wp-includes/html-api/class-wp-html-processor.php b/wp-includes/html-api/class-wp-html-processor.php index 6e1723494c..b5a20dbd82 100644 --- a/wp-includes/html-api/class-wp-html-processor.php +++ b/wp-includes/html-api/class-wp-html-processor.php @@ -432,6 +432,11 @@ class WP_HTML_Processor extends WP_HTML_Tag_Processor { * @return bool Whether a tag was matched. */ public function step( $node_to_process = self::PROCESS_NEXT_NODE ) { + // Refuse to proceed if there was a previous error. + if ( null !== $this->last_error ) { + return false; + } + if ( self::PROCESS_NEXT_NODE === $node_to_process ) { $top_node = $this->state->stack_of_open_elements->current_node(); if ( $top_node && self::is_void( $top_node->node_name ) ) { @@ -744,6 +749,10 @@ class WP_HTML_Processor extends WP_HTML_Tag_Processor { * @return string|null Name of currently matched tag in input HTML, or `null` if none found. */ public function get_tag() { + if ( null !== $this->last_error ) { + return null; + } + $tag_name = parent::get_tag(); switch ( $tag_name ) { diff --git a/wp-includes/version.php b/wp-includes/version.php index 0aac5f5e9b..460549500d 100644 --- a/wp-includes/version.php +++ b/wp-includes/version.php @@ -16,7 +16,7 @@ * * @global string $wp_version */ -$wp_version = '6.4-alpha-56492'; +$wp_version = '6.4-alpha-56493'; /** * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.