Title: [133489] branches/safari-536.28-branch/Source/WebCore
Revision
133489
Author
[email protected]
Date
2012-11-05 09:37:13 -0800 (Mon, 05 Nov 2012)

Log Message

Merged r125315.  <rdar://problem/12536439>

Modified Paths

Diff

Modified: branches/safari-536.28-branch/Source/WebCore/ChangeLog (133488 => 133489)


--- branches/safari-536.28-branch/Source/WebCore/ChangeLog	2012-11-05 17:33:27 UTC (rev 133488)
+++ branches/safari-536.28-branch/Source/WebCore/ChangeLog	2012-11-05 17:37:13 UTC (rev 133489)
@@ -1,5 +1,27 @@
 2012-11-05  Lucas Forschler  <[email protected]>
 
+        Merge r125315
+
+    2012-08-10  Abhishek Arya  <[email protected]>
+
+            Crash on accessing a removed layout root in FrameView::scheduleRelayout.
+            https://bugs.webkit.org/show_bug.cgi?id=91368
+
+            Reviewed by Levi Weintraub.
+
+            We were calling setNeedsLayoutAndPrefWidthsRecalc() in RenderBlock::collapseAnonymousBoxChild
+            even when documentBeingDestroyed() was true. This ends up accessing stale layout root and bypasses
+            mitigation added in r109406. There is no need to waste time merging up anonymous blocks in
+            RenderBlock::removeChild when documentBeingDestroyed() is true.
+
+            No new tests. The test is time sensitive, requires a bunch of reloads, and only reproduces on chromium linux.
+
+            * rendering/RenderBlock.cpp:
+            (WebCore::RenderBlock::collapseAnonymousBoxChild):
+            (WebCore::RenderBlock::removeChild):
+
+2012-11-05  Lucas Forschler  <[email protected]>
+
         Merge r125237
 
     2012-08-09  MORITA Hajime  <[email protected]>
@@ -206548,3 +206570,4 @@
 .
 .
 .
+.

Modified: branches/safari-536.28-branch/Source/WebCore/rendering/RenderBlock.cpp (133488 => 133489)


--- branches/safari-536.28-branch/Source/WebCore/rendering/RenderBlock.cpp	2012-11-05 17:33:27 UTC (rev 133488)
+++ branches/safari-536.28-branch/Source/WebCore/rendering/RenderBlock.cpp	2012-11-05 17:37:13 UTC (rev 133489)
@@ -1150,15 +1150,21 @@
     RenderBlock* anonBlock = toRenderBlock(parent->children()->removeChildNode(parent, child, child->hasLayer()));
     anonBlock->moveAllChildrenTo(parent, nextSibling, child->hasLayer());
     // Delete the now-empty block's lines and nuke it.
-    if (!parent->documentBeingDestroyed())
-        anonBlock->deleteLineBoxTree();
-    if (!parent->documentBeingDestroyed() && childFlowThread && childFlowThread->isRenderNamedFlowThread())
+    anonBlock->deleteLineBoxTree();
+    if (childFlowThread && childFlowThread->isRenderNamedFlowThread())
         toRenderNamedFlowThread(childFlowThread)->removeFlowChildInfo(anonBlock);
     anonBlock->destroy();
 }
 
 void RenderBlock::removeChild(RenderObject* oldChild)
 {
+    // No need to waste time in merging or removing empty anonymous blocks.
+    // We can just bail out if our document is getting destroyed.
+    if (documentBeingDestroyed()) {
+        RenderBox::removeChild(oldChild);
+        return;
+    }
+
     // If this child is a block, and if our previous and next siblings are
     // both anonymous blocks with inline content, then we can go ahead and
     // fold the inline content back together.
@@ -1228,7 +1234,7 @@
         }
     }
 
-    if (!firstChild() && !documentBeingDestroyed()) {
+    if (!firstChild()) {
         // If this was our last child be sure to clear out our line boxes.
         if (childrenInline())
             deleteLineBoxTree();
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to