Use-after-free in CompositeEditCommand::cloneParagraphUnderNewElement
authorrniwa@webkit.org <rniwa@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 22 Apr 2013 20:39:24 +0000 (20:39 +0000)
committerrniwa@webkit.org <rniwa@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 22 Apr 2013 20:39:24 +0000 (20:39 +0000)
https://bugs.webkit.org/show_bug.cgi?id=114911

Reviewed by Oliver Hunt.

Back ported https://src.chromium.org/viewvc/blink?revision=148680&view=revision.

* editing/CompositeEditCommand.cpp:
(WebCore::CompositeEditCommand::cloneParagraphUnderNewElement):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@148908 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/editing/CompositeEditCommand.cpp

index 2a5ea3569bf9cb5782f23e0a781d20e73ea5f18f..fef80a7734fafbbee8521bb84758e56c7016f879 100644 (file)
@@ -1,3 +1,15 @@
+2013-04-22  Ryosuke Niwa  <rniwa@webkit.org>
+
+        Use-after-free in CompositeEditCommand::cloneParagraphUnderNewElement
+        https://bugs.webkit.org/show_bug.cgi?id=114911
+
+        Reviewed by Oliver Hunt.
+
+        Back ported https://src.chromium.org/viewvc/blink?revision=148680&view=revision.
+
+        * editing/CompositeEditCommand.cpp:
+        (WebCore::CompositeEditCommand::cloneParagraphUnderNewElement):
+
 2013-04-22  Eric Carlson  <eric.carlson@apple.com>
 
         [Mac] "automatic" track selection should only select a track that matches user language
 2013-04-22  Eric Carlson  <eric.carlson@apple.com>
 
         [Mac] "automatic" track selection should only select a track that matches user language
index e78a75d7b4f792bde695e6c7145df42b617f527f..e7f9f00b66932322cdd3e58091a771dc8fc958f6 100644 (file)
@@ -1037,8 +1037,8 @@ void CompositeEditCommand::cloneParagraphUnderNewElement(Position& start, Positi
             outerNode = outerNode->parentNode();
         }
 
             outerNode = outerNode->parentNode();
         }
 
-        Node* startNode = start.deprecatedNode();
-        for (Node* node = NodeTraversal::nextSkippingChildren(startNode, outerNode.get()); node; node = NodeTraversal::nextSkippingChildren(node, outerNode.get())) {
+        RefPtr<Node> startNode = start.deprecatedNode();
+        for (RefPtr<Node> node = NodeTraversal::nextSkippingChildren(startNode.get(), outerNode.get()); node; node = NodeTraversal::nextSkippingChildren(node.get(), outerNode.get())) {
             // Move lastNode up in the tree as much as node was moved up in the
             // tree by NodeTraversal::nextSkippingChildren, so that the relative depth between
             // node and the original start node is maintained in the clone.
             // Move lastNode up in the tree as much as node was moved up in the
             // tree by NodeTraversal::nextSkippingChildren, so that the relative depth between
             // node and the original start node is maintained in the clone.
@@ -1050,7 +1050,7 @@ void CompositeEditCommand::cloneParagraphUnderNewElement(Position& start, Positi
             RefPtr<Node> clonedNode = node->cloneNode(true);
             insertNodeAfter(clonedNode, lastNode);
             lastNode = clonedNode.release();
             RefPtr<Node> clonedNode = node->cloneNode(true);
             insertNodeAfter(clonedNode, lastNode);
             lastNode = clonedNode.release();
-            if (node == end.deprecatedNode() || end.deprecatedNode()->isDescendantOf(node))
+            if (node == end.deprecatedNode() || end.deprecatedNode()->isDescendantOf(node.get()))
                 break;
         }
     }
                 break;
         }
     }