HTML API: Only examine HTML nodes in pop_until() instack of open elements.
The `pop_until( $tag_name )` method in the stack of open elements should only be examining HTML elements, but it has only been checking the tag name. This has led to closing the wrong tags when run from inside foreign content. A very specific situation where this may arise is when a `TEMPLATE` closer is found inside foreign content, inside another template.
{{{
HTML:template SVG:template HTML:/template
<template><svg><template><foreignObject><div></template><div>
╰──< this outer TEMPLATE is closed by this one >───╯
}}}
This patch constains the method to checking for elements matching the tag name which are in the HTML namespace so that the proper detection occurs.
Developed in https://github.com/WordPress/wordpress-develop/pull/7286
Discussed in https://core.trac.wordpress.org/ticket/61576
Follow-up to [58867].
Props dmsnell, jonsurrell.
See #61576.
Built from https://develop.svn.wordpress.org/trunk@58992
git-svn-id: http://core.svn.wordpress.org/trunk@58388 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
@@ -5428,6 +5428,11 @@ class WP_HTML_Processor extends WP_HTML_Tag_Processor {
|
||||
}
|
||||
}
|
||||
|
||||
// All of the following rules are for matching HTML elements.
|
||||
if ( 'html' !== $node->namespace ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
switch ( $node->node_name ) {
|
||||
/*
|
||||
* > 4. If node is a `select` element, run these substeps:
|
||||
@@ -5443,6 +5448,10 @@ class WP_HTML_Processor extends WP_HTML_Tag_Processor {
|
||||
case 'SELECT':
|
||||
if ( ! $last ) {
|
||||
foreach ( $this->state->stack_of_open_elements->walk_up( $node ) as $ancestor ) {
|
||||
if ( 'html' !== $ancestor->namespace ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
switch ( $ancestor->node_name ) {
|
||||
/*
|
||||
* > 5. If _ancestor_ is a `template` node, jump to the step below
|
||||
|
||||
Reference in New Issue
Block a user