Title: [133710] branches/safari-536.28-branch/Source/WebCore
Revision
133710
Author
[email protected]
Date
2012-11-06 18:47:06 -0800 (Tue, 06 Nov 2012)

Log Message

Merged r129270.  <rdar://problem/12536542>

Modified Paths

Diff

Modified: branches/safari-536.28-branch/Source/WebCore/ChangeLog (133709 => 133710)


--- branches/safari-536.28-branch/Source/WebCore/ChangeLog	2012-11-07 02:36:36 UTC (rev 133709)
+++ branches/safari-536.28-branch/Source/WebCore/ChangeLog	2012-11-07 02:47:06 UTC (rev 133710)
@@ -1,5 +1,25 @@
 2012-11-06  Lucas Forschler  <[email protected]>
 
+        Merge r129270
+
+    2012-09-21  Jeremy Apthorp  <[email protected]>
+
+            Crash in WebCore::Document::fullScreenChangeDelayTimerFired
+            https://bugs.webkit.org/show_bug.cgi?id=97367
+
+            Reviewed by Abhishek Arya.
+
+            The document could be destroyed during the processing of the
+            fullscreenchange event, if the document was destroyed as a result of
+            one of the dispatchEvent calls.
+
+            This bug isn't reliably reproducible, so no new tests.
+
+            * dom/Document.cpp:
+            (WebCore::Document::fullScreenChangeDelayTimerFired):
+
+2012-11-06  Lucas Forschler  <[email protected]>
+
         Merge r128964
 
     2012-09-18  Eric Carlson  <[email protected]>
@@ -206887,3 +206907,4 @@
 .
 .
 .
+.

Modified: branches/safari-536.28-branch/Source/WebCore/dom/Document.cpp (133709 => 133710)


--- branches/safari-536.28-branch/Source/WebCore/dom/Document.cpp	2012-11-07 02:36:36 UTC (rev 133709)
+++ branches/safari-536.28-branch/Source/WebCore/dom/Document.cpp	2012-11-07 02:47:06 UTC (rev 133710)
@@ -5702,6 +5702,10 @@
     
 void Document::fullScreenChangeDelayTimerFired(Timer<Document>*)
 {
+    // Since we dispatch events in this function, it's possible that the
+    // document will be detached and GC'd. We protect it here to make sure we
+    // can finish the function successfully.
+    RefPtr<Document> protectDocument(this);
     Deque<RefPtr<Node> > changeQueue;
     m_fullScreenChangeEventTargetQueue.swap(changeQueue);
 
@@ -5709,6 +5713,9 @@
         RefPtr<Node> node = changeQueue.takeFirst();
         if (!node)
             node = documentElement();
+        // The dispatchEvent below may have blown away our documentElement.
+        if (!node)
+            continue;
 
         // If the element was removed from our tree, also message the documentElement.
         if (!contains(node.get()))
@@ -5724,6 +5731,9 @@
         RefPtr<Node> node = errorQueue.takeFirst();
         if (!node)
             node = documentElement();
+        // The dispatchEvent below may have blown away our documentElement.
+        if (!node)
+            continue;
         
         // If the node was removed from our tree, also message the documentElement.
         if (!contains(node.get()))
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to