diff --git a/dom/base/nsTreeSanitizer.cpp b/dom/base/nsTreeSanitizer.cpp index 9f2bba1ad6ce..2331818724fc 100644 --- a/dom/base/nsTreeSanitizer.cpp +++ b/dom/base/nsTreeSanitizer.cpp @@ -1823,11 +1823,14 @@ bool nsTreeSanitizer::SanitizeInlineStyle( } void nsTreeSanitizer::RemoveConditionalCSSFromSubtree(nsINode* aRoot) { + AutoTArray, 10> nodesToSanitize; for (nsINode* node : ShadowIncludingTreeIterator(*aRoot)) { - if (!node->IsHTMLElement(nsGkAtoms::style) && - !node->IsSVGElement(nsGkAtoms::style)) { - continue; + if (node->IsHTMLElement(nsGkAtoms::style) || + node->IsSVGElement(nsGkAtoms::style)) { + nodesToSanitize.AppendElement(node); } + } + for (nsINode* node : nodesToSanitize) { SanitizeInlineStyle(node->AsElement(), StyleSanitizationKind::NoConditionalRules); } diff --git a/parser/xml/test/unit/test_sanitizer_style.js b/parser/xml/test/unit/test_sanitizer_style.js index 5939e1bdb37d..6f00295cda67 100644 --- a/parser/xml/test/unit/test_sanitizer_style.js +++ b/parser/xml/test/unit/test_sanitizer_style.js @@ -71,6 +71,10 @@ const kConditionalCSSTestCases = [ data: `#foo { display: none } @media (min-width: 300px) { #bar { display: none } }`, sanitized: `#foo { display: none }`, }, + { + data: `@media (min-width: 300px) { #bar { display: none } }`, + sanitized: ``, + }, ]; function run_test() {