Title: [94541] trunk
Revision
94541
Author
[email protected]
Date
2011-09-05 18:16:57 -0700 (Mon, 05 Sep 2011)

Log Message

Crash in RenderObjectChildList::destroyLeftOverChildren()
https://bugs.webkit.org/show_bug.cgi?id=64753

Reviewed by James Robinson.

Source/WebCore: 

If any of the ancestors between column span element and containing
column's block is a continuation, then don't attempt to render the
column span by splitting the block into continuations.

Test: fast/multicol/column-span-parent-continuation-crash.html

* rendering/RenderBlock.cpp:
(WebCore::RenderBlock::columnsBlockForSpanningElement):

LayoutTests: 

anonymous-split-block-crash rendering was already wrong. The fix prevents
the tree to go bad and hence does not do the column-span rendering. same issue
with clone-anonymous-block-non-inline-child-crash test.

* fast/multicol/column-span-parent-continuation-crash-expected.txt: Added.
* fast/multicol/column-span-parent-continuation-crash.html: Added.
* platform/mac/fast/multicol/span/anonymous-split-block-crash-expected.png:
* platform/mac/fast/multicol/span/anonymous-split-block-crash-expected.txt:
* platform/mac/fast/multicol/span/clone-anonymous-block-non-inline-child-crash-expected.png:
* platform/mac/fast/multicol/span/clone-anonymous-block-non-inline-child-crash-expected.txt:

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (94540 => 94541)


--- trunk/LayoutTests/ChangeLog	2011-09-05 23:18:00 UTC (rev 94540)
+++ trunk/LayoutTests/ChangeLog	2011-09-06 01:16:57 UTC (rev 94541)
@@ -1,3 +1,21 @@
+2011-09-05  Abhishek Arya  <[email protected]>
+
+        Crash in RenderObjectChildList::destroyLeftOverChildren()
+        https://bugs.webkit.org/show_bug.cgi?id=64753
+
+        Reviewed by James Robinson.
+
+        anonymous-split-block-crash rendering was already wrong. The fix prevents
+        the tree to go bad and hence does not do the column-span rendering. same issue
+        with clone-anonymous-block-non-inline-child-crash test.
+
+        * fast/multicol/column-span-parent-continuation-crash-expected.txt: Added.
+        * fast/multicol/column-span-parent-continuation-crash.html: Added.
+        * platform/mac/fast/multicol/span/anonymous-split-block-crash-expected.png:
+        * platform/mac/fast/multicol/span/anonymous-split-block-crash-expected.txt:
+        * platform/mac/fast/multicol/span/clone-anonymous-block-non-inline-child-crash-expected.png:
+        * platform/mac/fast/multicol/span/clone-anonymous-block-non-inline-child-crash-expected.txt:
+
 2011-09-05  John Knottenbelt  <[email protected]>
 
         Take pageScaleFactor into account for MouseRelatedEvents.

Added: trunk/LayoutTests/fast/multicol/column-span-parent-continuation-crash-expected.txt (0 => 94541)


--- trunk/LayoutTests/fast/multicol/column-span-parent-continuation-crash-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/multicol/column-span-parent-continuation-crash-expected.txt	2011-09-06 01:16:57 UTC (rev 94541)
@@ -0,0 +1 @@
+PASS

Added: trunk/LayoutTests/fast/multicol/column-span-parent-continuation-crash.html (0 => 94541)


--- trunk/LayoutTests/fast/multicol/column-span-parent-continuation-crash.html	                        (rev 0)
+++ trunk/LayoutTests/fast/multicol/column-span-parent-continuation-crash.html	2011-09-06 01:16:57 UTC (rev 94541)
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html>
+<body>
+<div id="console"></div>
+<style>
+div { -webkit-column-count: 1; }
+h2 { -webkit-column-span: all; }
+</style>
+<script src=""
+<script>
+if (window.layoutTestController) {
+    layoutTestController.dumpAsText();
+	layoutTestController.waitUntilDone();
+}
+
+function runTest()
+{
+    document.body.offsetTop;
+    child = document.getElementById('test');
+    child.parentNode.removeChild(child);
+    child = document.getElementById('anything');
+    gc();
+    document.body.innerHTML = "PASS";
+
+	var successfullyParsed = true;
+	if (window.layoutTestController)
+   	    layoutTestController.notifyDone();
+}
+
+setTimeout("runTest()", 0);
+</script>
+<script src=""
+<div>
+<span id="test"><h2></span>
+</div>
+</body>
+</html>
\ No newline at end of file

Modified: trunk/LayoutTests/platform/mac/fast/multicol/span/anonymous-split-block-crash-expected.png


(Binary files differ)

Modified: trunk/LayoutTests/platform/mac/fast/multicol/span/anonymous-split-block-crash-expected.txt (94540 => 94541)


--- trunk/LayoutTests/platform/mac/fast/multicol/span/anonymous-split-block-crash-expected.txt	2011-09-05 23:18:00 UTC (rev 94540)
+++ trunk/LayoutTests/platform/mac/fast/multicol/span/anonymous-split-block-crash-expected.txt	2011-09-06 01:16:57 UTC (rev 94541)
@@ -3,27 +3,26 @@
 layer at (0,0) size 800x600
   RenderBlock {HTML} at (0,0) size 800x600
     RenderBody {BODY} at (8,16) size 784x568
-layer at (8,16) size 784x184
-  RenderBlock {DIV} at (0,0) size 784x184 [border: (5px solid #800000)]
-    RenderBlock (anonymous multi-column span) at (5,113) size 774x66
-      RenderBlock {H2} at (0,19) size 774x28 [bgcolor=#EEEEEE]
+layer at (8,16) size 784x151
+  RenderBlock {DIV} at (0,0) size 784x151 [border: (5px solid #800000)]
+    RenderBlock (anonymous) at (5,5) size 379x0
+      RenderInline {JUNK} at (0,0) size 0x0
+        RenderText {#text} at (0,0) size 0x0
+    RenderBlock (anonymous) at (5,24) size 379x28
+      RenderBlock {H2} at (0,0) size 379x28 [bgcolor=#EEEEEE]
         RenderText {#text} at (0,0) size 58x28
           text run at (0,0) width 58: "PASS"
-layer at (13,21) size 774x108
-  RenderBlock (anonymous multi-column) at (5,5) size 774x108
-    RenderBlock (anonymous) at (0,0) size 379x198
-      RenderInline {JUNK} at (0,0) size 369x198
-        RenderText {#text} at (0,0) size 0x0
-        RenderText {#text} at (0,0) size 369x198
+    RenderBlock (anonymous) at (5,71) size 379x201
+      RenderInline {JUNK} at (0,0) size 369x201
+        RenderText {#text} at (0,0) size 369x201
           text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
           text run at (0,18) width 351: "Nulla varius enim ac mi. Curabitur sollicitudin felis quis"
           text run at (0,36) width 368: "lectus. Quisque adipiscing rhoncus sem. Proin nulla purus,"
           text run at (0,54) width 368: "vulputate vel, varius ut, euismod et, nisi. Sed vitae felis vel"
-          text run at (0,72) width 358: "orci sagittis aliquam. Cras convallis adipiscing sem. Nam"
-          text run at (0,90) width 318: "nonummy enim. Nullam bibendum lobortis neque."
-          text run at (0,108) width 332: "Vestibulum velit orci, tempus euismod, pretium quis,"
-          text run at (0,126) width 309: "interdum vitae, nulla. Phasellus eget ante et tortor"
-          text run at (0,144) width 369: "condimentum vestibulum. Suspendisse hendrerit quam nec"
-          text run at (0,162) width 354: "felis. Sed varius turpis vitae pede. Lorem ipsum dolor sit"
-          text run at (0,180) width 211: "amet, consectetuer adipiscing elit."
-    RenderBlock (anonymous) at (0,198) size 379x0
+          text run at (0,75) width 358: "orci sagittis aliquam. Cras convallis adipiscing sem. Nam"
+          text run at (0,93) width 318: "nonummy enim. Nullam bibendum lobortis neque."
+          text run at (0,111) width 332: "Vestibulum velit orci, tempus euismod, pretium quis,"
+          text run at (0,129) width 309: "interdum vitae, nulla. Phasellus eget ante et tortor"
+          text run at (0,147) width 369: "condimentum vestibulum. Suspendisse hendrerit quam nec"
+          text run at (0,165) width 354: "felis. Sed varius turpis vitae pede. Lorem ipsum dolor sit"
+          text run at (0,183) width 211: "amet, consectetuer adipiscing elit."

Modified: trunk/LayoutTests/platform/mac/fast/multicol/span/clone-anonymous-block-non-inline-child-crash-expected.png


(Binary files differ)

Modified: trunk/LayoutTests/platform/mac/fast/multicol/span/clone-anonymous-block-non-inline-child-crash-expected.txt (94540 => 94541)


--- trunk/LayoutTests/platform/mac/fast/multicol/span/clone-anonymous-block-non-inline-child-crash-expected.txt	2011-09-05 23:18:00 UTC (rev 94540)
+++ trunk/LayoutTests/platform/mac/fast/multicol/span/clone-anonymous-block-non-inline-child-crash-expected.txt	2011-09-06 01:16:57 UTC (rev 94541)
@@ -3,37 +3,32 @@
 layer at (0,0) size 800x600
   RenderBlock {HTML} at (0,0) size 800x600
     RenderBody {BODY} at (8,16) size 784x568
-layer at (8,16) size 784x202
-  RenderBlock {DIV} at (0,0) size 784x202 [border: (5px solid #800000)]
-    RenderBlock (anonymous multi-column span) at (5,23) size 774x66
-      RenderBlock {H2} at (0,19) size 774x28 [bgcolor=#EEEEEE]
-        RenderText {#text} at (0,0) size 58x28
-          text run at (0,0) width 58: "PASS"
-layer at (13,21) size 774x18
-  RenderBlock (anonymous multi-column) at (5,5) size 774x18
-    RenderBlock (anonymous) at (0,0) size 379x18
+layer at (8,16) size 784x169
+  RenderBlock {DIV} at (0,0) size 784x169 [border: (5px solid #800000)]
+    RenderBlock (anonymous) at (5,5) size 379x18
       RenderInline {LABEL} at (0,0) size 102x18
         RenderText {#text} at (0,0) size 102x18
           text run at (0,0) width 102: "Some inline text"
-    RenderBlock (anonymous) at (0,18) size 379x18
-      RenderSummary {SUMMARY} at (0,0) size 379x18
-        RenderText {#text} at (0,0) size 102x18
-          text run at (0,0) width 102: "Some block text"
-layer at (13,105) size 774x108
-  RenderBlock (anonymous multi-column) at (5,89) size 774x108
-    RenderBlock (anonymous) at (0,0) size 379x198
-      RenderBlock {SUMMARY} at (0,0) size 379x198
-        RenderText {#text} at (0,0) size 369x198
-          text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
-          text run at (0,18) width 351: "Nulla varius enim ac mi. Curabitur sollicitudin felis quis"
-          text run at (0,36) width 368: "lectus. Quisque adipiscing rhoncus sem. Proin nulla purus,"
-          text run at (0,54) width 368: "vulputate vel, varius ut, euismod et, nisi. Sed vitae felis vel"
-          text run at (0,72) width 358: "orci sagittis aliquam. Cras convallis adipiscing sem. Nam"
-          text run at (0,90) width 318: "nonummy enim. Nullam bibendum lobortis neque."
-          text run at (0,108) width 332: "Vestibulum velit orci, tempus euismod, pretium quis,"
-          text run at (0,126) width 309: "interdum vitae, nulla. Phasellus eget ante et tortor"
-          text run at (0,144) width 369: "condimentum vestibulum. Suspendisse hendrerit quam nec"
-          text run at (0,162) width 354: "felis. Sed varius turpis vitae pede. Lorem ipsum dolor sit"
-          text run at (0,180) width 211: "amet, consectetuer adipiscing elit."
-    RenderBlock (anonymous) at (0,198) size 379x0
+    RenderBlock (anonymous) at (5,23) size 379x285
+      RenderSummary {SUMMARY} at (0,0) size 379x285
+        RenderBlock (anonymous) at (0,0) size 379x18
+          RenderText {#text} at (0,0) size 102x18
+            text run at (0,0) width 102: "Some block text"
+        RenderBlock {H2} at (0,37) size 379x28 [bgcolor=#EEEEEE]
+          RenderText {#text} at (0,0) size 58x28
+            text run at (0,0) width 58: "PASS"
+        RenderBlock (anonymous) at (0,84) size 379x201
+          RenderText {#text} at (0,0) size 369x201
+            text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
+            text run at (0,18) width 351: "Nulla varius enim ac mi. Curabitur sollicitudin felis quis"
+            text run at (0,36) width 368: "lectus. Quisque adipiscing rhoncus sem. Proin nulla purus,"
+            text run at (0,57) width 368: "vulputate vel, varius ut, euismod et, nisi. Sed vitae felis vel"
+            text run at (0,75) width 358: "orci sagittis aliquam. Cras convallis adipiscing sem. Nam"
+            text run at (0,93) width 318: "nonummy enim. Nullam bibendum lobortis neque."
+            text run at (0,111) width 332: "Vestibulum velit orci, tempus euismod, pretium quis,"
+            text run at (0,129) width 309: "interdum vitae, nulla. Phasellus eget ante et tortor"
+            text run at (0,147) width 369: "condimentum vestibulum. Suspendisse hendrerit quam nec"
+            text run at (0,165) width 354: "felis. Sed varius turpis vitae pede. Lorem ipsum dolor sit"
+            text run at (0,183) width 211: "amet, consectetuer adipiscing elit."
+    RenderBlock (anonymous) at (5,308) size 379x0
       RenderInline {LABEL} at (0,0) size 0x0

Modified: trunk/Source/WebCore/ChangeLog (94540 => 94541)


--- trunk/Source/WebCore/ChangeLog	2011-09-05 23:18:00 UTC (rev 94540)
+++ trunk/Source/WebCore/ChangeLog	2011-09-06 01:16:57 UTC (rev 94541)
@@ -1,3 +1,19 @@
+2011-09-05  Abhishek Arya  <[email protected]>
+
+        Crash in RenderObjectChildList::destroyLeftOverChildren()
+        https://bugs.webkit.org/show_bug.cgi?id=64753
+
+        Reviewed by James Robinson.
+
+        If any of the ancestors between column span element and containing
+        column's block is a continuation, then don't attempt to render the
+        column span by splitting the block into continuations.
+
+        Test: fast/multicol/column-span-parent-continuation-crash.html
+
+        * rendering/RenderBlock.cpp:
+        (WebCore::RenderBlock::columnsBlockForSpanningElement):
+
 2011-09-05  Sheriff Bot  <[email protected]>
 
         Unreviewed, rolling out r94537.

Modified: trunk/Source/WebCore/rendering/RenderBlock.cpp (94540 => 94541)


--- trunk/Source/WebCore/rendering/RenderBlock.cpp	2011-09-05 23:18:00 UTC (rev 94540)
+++ trunk/Source/WebCore/rendering/RenderBlock.cpp	2011-09-06 01:16:57 UTC (rev 94541)
@@ -659,8 +659,22 @@
         && !newChild->isInline() && !isAnonymousColumnSpanBlock()) {
         if (style()->specifiesColumns())
             columnsBlockAncestor = this;
-        else if (!isInline() && parent() && parent()->isRenderBlock())
+        else if (!isInline() && parent() && parent()->isRenderBlock()) {
             columnsBlockAncestor = toRenderBlock(parent())->containingColumnsBlock(false);
+            
+            if (columnsBlockAncestor) {
+                // Make sure that none of the parent ancestors have a continuation.
+                // If yes, we do not want split the block into continuations.
+                RenderObject* curr = this;
+                while (curr && curr != columnsBlockAncestor) {
+                    if (curr->isRenderBlock() && toRenderBlock(curr)->continuation()) {
+                        columnsBlockAncestor = 0;
+                        break;
+                    }
+                    curr = curr->parent();
+                }
+            }
+        }
     }
     return columnsBlockAncestor;
 }
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to