Title: [121992] releases/WebKitGTK/webkit-1.8/Source/WebCore
Revision
121992
Author
mrobin...@webkit.org
Date
2012-07-06 13:00:41 -0700 (Fri, 06 Jul 2012)

Log Message

Merge 116717 - Crash in swapInNodePreservingAttributesAndChildren.
https://bugs.webkit.org/show_bug.cgi?id=85197

Patch by Abhishek Arya <infe...@chromium.org> on 2012-05-10
Reviewed by Ryosuke Niwa.

Keep the children in a ref vector before adding them to newNode.
They can get destroyed due to mutation events.

No new tests because we don't have a reduction.

* editing/ReplaceNodeWithSpanCommand.cpp:
(WebCore::swapInNodePreservingAttributesAndChildren):

Modified Paths

Diff

Modified: releases/WebKitGTK/webkit-1.8/Source/WebCore/ChangeLog (121991 => 121992)


--- releases/WebKitGTK/webkit-1.8/Source/WebCore/ChangeLog	2012-07-06 20:00:27 UTC (rev 121991)
+++ releases/WebKitGTK/webkit-1.8/Source/WebCore/ChangeLog	2012-07-06 20:00:41 UTC (rev 121992)
@@ -1,3 +1,18 @@
+2012-05-10  Abhishek Arya  <infe...@chromium.org>
+
+        Crash in swapInNodePreservingAttributesAndChildren.
+        https://bugs.webkit.org/show_bug.cgi?id=85197
+ 
+        Reviewed by Ryosuke Niwa.
+ 
+        Keep the children in a ref vector before adding them to newNode.
+        They can get destroyed due to mutation events.
+
+        No new tests because we don't have a reduction.
+
+        * editing/ReplaceNodeWithSpanCommand.cpp:
+        (WebCore::swapInNodePreservingAttributesAndChildren):
+
 2012-05-07  Ken Buchanan  <ke...@chromium.org>
 
         Crash due to positioned object list not being cleared during block flow split

Modified: releases/WebKitGTK/webkit-1.8/Source/WebCore/editing/ReplaceNodeWithSpanCommand.cpp (121991 => 121992)


--- releases/WebKitGTK/webkit-1.8/Source/WebCore/editing/ReplaceNodeWithSpanCommand.cpp	2012-07-06 20:00:27 UTC (rev 121991)
+++ releases/WebKitGTK/webkit-1.8/Source/WebCore/editing/ReplaceNodeWithSpanCommand.cpp	2012-07-06 20:00:41 UTC (rev 121992)
@@ -56,10 +56,10 @@
     parentNode->insertBefore(newNode, nodeToReplace, ec);
     ASSERT(!ec);
 
-    RefPtr<Node> nextChild;
-    for (Node* child = nodeToReplace->firstChild(); child; child = nextChild.get()) {
-        nextChild = child->nextSibling();
-        newNode->appendChild(child, ec);
+    NodeVector children;
+    getChildNodes(nodeToReplace, children);
+    for (size_t i = 0; i < children.size(); ++i) {
+        newNode->appendChild(children[i], ec);
         ASSERT(!ec);
     }
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to