Title: [273868] trunk/Source/WebCore
Revision
273868
Author
commit-qu...@webkit.org
Date
2021-03-03 18:13:28 -0800 (Wed, 03 Mar 2021)

Log Message

Crash in removeSymbolElementsFromSubtree()
https://bugs.webkit.org/show_bug.cgi?id=222397

Patch by Julian Gonzalez <julian_a_gonza...@apple.com> on 2021-03-03
Reviewed by Ryosuke Niwa.

Skip children in removeSymbolElementsFromSubtree(), so that
we don't see nodes that have been removed in disassociateAndRemoveClones.

Thanks to Darin Adler for the initial version of this patch
and Ryosuke Niwa for refinements.

* svg/SVGUseElement.cpp:
(WebCore::removeSymbolElementsFromSubtree):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (273867 => 273868)


--- trunk/Source/WebCore/ChangeLog	2021-03-04 01:49:00 UTC (rev 273867)
+++ trunk/Source/WebCore/ChangeLog	2021-03-04 02:13:28 UTC (rev 273868)
@@ -1,3 +1,19 @@
+2021-03-03  Julian Gonzalez  <julian_a_gonza...@apple.com>
+
+        Crash in removeSymbolElementsFromSubtree()
+        https://bugs.webkit.org/show_bug.cgi?id=222397
+
+        Reviewed by Ryosuke Niwa.
+
+        Skip children in removeSymbolElementsFromSubtree(), so that
+        we don't see nodes that have been removed in disassociateAndRemoveClones.
+
+        Thanks to Darin Adler for the initial version of this patch
+        and Ryosuke Niwa for refinements.
+
+        * svg/SVGUseElement.cpp:
+        (WebCore::removeSymbolElementsFromSubtree):
+
 2021-03-03  Ryosuke Niwa  <rn...@webkit.org>
 
         Nulllptr crash in DeleteSelectionCommand::handleGeneralDelete()

Modified: trunk/Source/WebCore/svg/SVGUseElement.cpp (273867 => 273868)


--- trunk/Source/WebCore/svg/SVGUseElement.cpp	2021-03-04 01:49:00 UTC (rev 273867)
+++ trunk/Source/WebCore/svg/SVGUseElement.cpp	2021-03-04 02:13:28 UTC (rev 273868)
@@ -350,8 +350,14 @@
     // into <svg> elements, which is correct for symbol elements directly referenced by use elements,
     // but incorrect for ones that just happen to be in a subtree.
     Vector<Element*> symbolElements;
-    for (auto& descendant : descendantsOfType<SVGSymbolElement>(subtree))
-        symbolElements.append(&descendant);
+    for (auto it = descendantsOfType<Element>(subtree).begin(); it; ) {
+        if (is<SVGSymbolElement>(*it)) {
+            symbolElements.append(&*it);
+            it.traverseNextSkippingChildren();
+            continue;
+        }
+        ++it;
+    }
     disassociateAndRemoveClones(symbolElements);
 }
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to