mirror of
https://github.com/servo/servo.git
synced 2025-06-27 18:43:40 +01:00
script Exclude CDATASection
nodes from Node::normalize()
(#37550)
Exclude CDATASection nodes from Node::normalize. I made it under the assumption that CDATAs can't have children so we don't need to go into the `else node.Normalize()` branch on line 3485 with them, hope this is correct. Testing: covered by `dom/nodes/Node-normalize.html` Fixes: https://github.com/servo/servo/issues/37006 --------- Signed-off-by: Rodion Borovyk <rodion.borovyk@gmail.com>
This commit is contained in:
parent
06b5422abf
commit
3a54ddd034
3 changed files with 9 additions and 9 deletions
|
@ -50,6 +50,7 @@ use style::stylesheets::{Stylesheet, UrlExtraData};
|
|||
use uuid::Uuid;
|
||||
use xml5ever::{local_name, serialize as xml_serialize};
|
||||
|
||||
use super::types::CDATASection;
|
||||
use crate::conversions::Convert;
|
||||
use crate::document_loader::DocumentLoader;
|
||||
use crate::dom::attr::Attr;
|
||||
|
@ -3458,16 +3459,18 @@ impl NodeMethods<crate::DomTypeHolder> for Node {
|
|||
let mut children = self.children().enumerate().peekable();
|
||||
while let Some((_, node)) = children.next() {
|
||||
if let Some(text) = node.downcast::<Text>() {
|
||||
if text.is::<CDATASection>() {
|
||||
continue;
|
||||
}
|
||||
let cdata = text.upcast::<CharacterData>();
|
||||
let mut length = cdata.Length();
|
||||
if length == 0 {
|
||||
Node::remove(&node, self, SuppressObserver::Unsuppressed, can_gc);
|
||||
continue;
|
||||
}
|
||||
while children
|
||||
.peek()
|
||||
.is_some_and(|(_, sibling)| sibling.is::<Text>())
|
||||
{
|
||||
while children.peek().is_some_and(|(_, sibling)| {
|
||||
sibling.is::<Text>() && !sibling.is::<CDATASection>()
|
||||
}) {
|
||||
let (index, sibling) = children.next().unwrap();
|
||||
sibling
|
||||
.ranges()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue