Title: [186841] branches/safari-600.8-branch

Diff

Modified: branches/safari-600.8-branch/LayoutTests/ChangeLog (186840 => 186841)


--- branches/safari-600.8-branch/LayoutTests/ChangeLog	2015-07-15 16:02:39 UTC (rev 186840)
+++ branches/safari-600.8-branch/LayoutTests/ChangeLog	2015-07-15 16:04:12 UTC (rev 186841)
@@ -1,3 +1,26 @@
+2015-07-15  Matthew Hanson  <matthew_han...@apple.com>
+
+        Merge r186746. rdar://problem/21716391
+
+    2015-07-12  David Kilzer  <ddkil...@apple.com>
+
+            Merge r185572. rdar://problem/21716531
+
+        2015-06-15  Zalan Bujtas  <za...@apple.com>
+
+            RootInlineBox::m_lineBreakObj becomes invalid when a child renderer is removed and the line does not get marked dirty.
+            https://bugs.webkit.org/show_bug.cgi?id=145988
+            rdar://problem/20959137
+
+            Reviewed by David Hyatt.
+
+            This patch ensures that we find the right first inline box so that we can dirty the
+            the appropriate line boxes.
+            With marking the right line boxes dirty, now we can update RootInlineBox::m_lineBreakObj at the next layout.
+
+            * fast/inline/crash-when-child-renderer-is-removed-and-line-stays-clean-expected.txt: Added.
+            * fast/inline/crash-when-child-renderer-is-removed-and-line-stays-clean.html: Added.
+
 2015-07-09  Matthew Hanson  <matthew_han...@apple.com>
 
         Merge r186577. rdar://problem/21533109

Added: branches/safari-600.8-branch/LayoutTests/fast/inline/crash-when-child-renderer-is-removed-and-line-stays-clean-expected.txt (0 => 186841)


--- branches/safari-600.8-branch/LayoutTests/fast/inline/crash-when-child-renderer-is-removed-and-line-stays-clean-expected.txt	                        (rev 0)
+++ branches/safari-600.8-branch/LayoutTests/fast/inline/crash-when-child-renderer-is-removed-and-line-stays-clean-expected.txt	2015-07-15 16:04:12 UTC (rev 186841)
@@ -0,0 +1,4 @@
+Pass if no crash or assert in Debug.   bar
+
+
+

Added: branches/safari-600.8-branch/LayoutTests/fast/inline/crash-when-child-renderer-is-removed-and-line-stays-clean.html (0 => 186841)


--- branches/safari-600.8-branch/LayoutTests/fast/inline/crash-when-child-renderer-is-removed-and-line-stays-clean.html	                        (rev 0)
+++ branches/safari-600.8-branch/LayoutTests/fast/inline/crash-when-child-renderer-is-removed-and-line-stays-clean.html	2015-07-15 16:04:12 UTC (rev 186841)
@@ -0,0 +1,22 @@
+<script>
+if (window.testRunner)
+    testRunner.dumpAsText();
+window._onload_ = function()
+{
+    document.body.offsetTop;
+    b.lastChild.parentNode.removeChild(b.lastChild);
+    document.body.offsetTop;
+    a.firstChild.parentNode.removeChild(a.firstChild);
+}
+</script>
+<body>
+<div id="a">foo</div><div></div>
+<div>Pass if no crash or assert in Debug.    
+<output>
+<o&#x0195;tput>bar</output>
+<span id="b">
+<span>
+<div style="display:inline-block"></div>
+<br><br><br>
+</span>
+</body>

Modified: branches/safari-600.8-branch/Source/WebCore/ChangeLog (186840 => 186841)


--- branches/safari-600.8-branch/Source/WebCore/ChangeLog	2015-07-15 16:02:39 UTC (rev 186840)
+++ branches/safari-600.8-branch/Source/WebCore/ChangeLog	2015-07-15 16:04:12 UTC (rev 186841)
@@ -1,3 +1,31 @@
+2015-07-15  Matthew Hanson  <matthew_han...@apple.com>
+
+        Merge r186746. rdar://problem/21716391
+
+    2015-07-12  David Kilzer  <ddkil...@apple.com>
+
+            Merge r185572. rdar://problem/21716531
+
+        2015-06-15  Zalan Bujtas  <za...@apple.com>
+
+            RootInlineBox::m_lineBreakObj becomes invalid when a child renderer is removed and the line does not get marked dirty.
+            https://bugs.webkit.org/show_bug.cgi?id=145988
+            rdar://problem/20959137
+
+            Reviewed by David Hyatt.
+
+            This patch ensures that we find the right first inline box so that we can dirty the
+            the appropriate line boxes.
+            With marking the right line boxes dirty, now we can update RootInlineBox::m_lineBreakObj at the next layout.
+
+            Test: fast/inline/crash-when-child-renderer-is-removed-and-line-stays-clean.html
+
+            * rendering/RenderInline.cpp:
+            (WebCore::RenderInline::culledInlineFirstLineBox):
+            (WebCore::RenderInline::culledInlineLastLineBox):
+            * rendering/RootInlineBox.cpp:
+            (WebCore::RootInlineBox::setLineBreakInfo): Deleted. Remove misleading assert and comment.
+
 2015-07-09  Matthew Hanson  <matthew_han...@apple.com>
 
         Merge r186508. rdar://problem/21707887

Modified: branches/safari-600.8-branch/Source/WebCore/rendering/RenderInline.cpp (186840 => 186841)


--- branches/safari-600.8-branch/Source/WebCore/rendering/RenderInline.cpp	2015-07-15 16:02:39 UTC (rev 186840)
+++ branches/safari-600.8-branch/Source/WebCore/rendering/RenderInline.cpp	2015-07-15 16:04:12 UTC (rev 186841)
@@ -925,9 +925,11 @@
             
         // We want to get the margin box in the inline direction, and then use our font ascent/descent in the block
         // direction (aligned to the root box's baseline).
-        if (curr->isBox())
-            return toRenderBox(curr)->inlineBoxWrapper();
-        if (curr->isLineBreak()) {
+        if (curr->isBox()) {
+            const RenderBox* renderBox = toRenderBox(curr);
+            if (renderBox->inlineBoxWrapper())
+                return renderBox->inlineBoxWrapper();
+        } else if (curr->isLineBreak()) {
             RenderLineBreak* renderBR = toRenderLineBreak(curr);
             if (renderBR->inlineBoxWrapper())
                 return renderBR->inlineBoxWrapper();
@@ -953,9 +955,11 @@
             
         // We want to get the margin box in the inline direction, and then use our font ascent/descent in the block
         // direction (aligned to the root box's baseline).
-        if (curr->isBox())
-            return toRenderBox(curr)->inlineBoxWrapper();
-        if (curr->isLineBreak()) {
+        if (curr->isBox()) {
+            const RenderBox* renderBox = toRenderBox(curr);
+            if (renderBox->inlineBoxWrapper())
+                return renderBox->inlineBoxWrapper();
+        } else if (curr->isLineBreak()) {
             RenderLineBreak* renderBR = toRenderLineBreak(curr);
             if (renderBR->inlineBoxWrapper())
                 return renderBR->inlineBoxWrapper();

Modified: branches/safari-600.8-branch/Source/WebCore/rendering/RootInlineBox.cpp (186840 => 186841)


--- branches/safari-600.8-branch/Source/WebCore/rendering/RootInlineBox.cpp	2015-07-15 16:02:39 UTC (rev 186840)
+++ branches/safari-600.8-branch/Source/WebCore/rendering/RootInlineBox.cpp	2015-07-15 16:04:12 UTC (rev 186841)
@@ -790,13 +790,6 @@
 
 void RootInlineBox::setLineBreakInfo(RenderObject* obj, unsigned breakPos, const BidiStatus& status)
 {
-    // When setting lineBreakObj, the RenderObject must not be a RenderInline
-    // with no line boxes, otherwise all sorts of invariants are broken later.
-    // This has security implications because if the RenderObject does not
-    // point to at least one line box, then that RenderInline can be deleted
-    // later without resetting the lineBreakObj, leading to use-after-free.
-    ASSERT_WITH_SECURITY_IMPLICATION(!obj || obj->isText() || !(obj->isRenderInline() && obj->isBox() && !toRenderBox(obj)->inlineBoxWrapper()));
-
     m_lineBreakObj = obj;
     m_lineBreakPos = breakPos;
     m_lineBreakBidiStatusEor = status.eor;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to