Regression(r179438) Simple line layout: ASSERTION at SimpleLineLayout::FlowContentsIt...
authorzalan@apple.com <zalan@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 31 Jan 2015 20:30:50 +0000 (20:30 +0000)
committerzalan@apple.com <zalan@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 31 Jan 2015 20:30:50 +0000 (20:30 +0000)
https://bugs.webkit.org/show_bug.cgi?id=141121

Reviewed by Antti Koivisto.

When a breakable text fragment does not fit the current line, we split it.
The first part stays on the current line, while the second part gets pushed to the next line.
In certain cases, the first part could end up being empty.
This patch ensures that we don't measure empty fragments.

Covered by existing tests.

* rendering/SimpleLineLayout.cpp:
(WebCore::SimpleLineLayout::splitFragmentToFitLine):

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

Source/WebCore/ChangeLog
Source/WebCore/rendering/SimpleLineLayout.cpp

index 5de2a67..13577c9 100644 (file)
@@ -1,3 +1,20 @@
+2015-01-31  Zalan Bujtas  <zalan@apple.com>
+
+        Regression(r179438) Simple line layout: ASSERTION at SimpleLineLayout::FlowContentsIterator::runWidth().
+        https://bugs.webkit.org/show_bug.cgi?id=141121
+
+        Reviewed by Antti Koivisto.
+
+        When a breakable text fragment does not fit the current line, we split it.
+        The first part stays on the current line, while the second part gets pushed to the next line.
+        In certain cases, the first part could end up being empty.
+        This patch ensures that we don't measure empty fragments.
+
+        Covered by existing tests.
+
+        * rendering/SimpleLineLayout.cpp:
+        (WebCore::SimpleLineLayout::splitFragmentToFitLine):
+
 2015-01-31  Commit Queue  <commit-queue@webkit.org>
 
         Unreviewed, rolling out r179426.
index 13b77fe..b9312b6 100644 (file)
@@ -368,7 +368,8 @@ static FlowContentsIterator::TextFragment splitFragmentToFitLine(FlowContentsIte
 
     unsigned thisLineStart = fragmentToSplit.start();
     unsigned thisLineEnd = right;
-    float thisLineWidth = flowContentsIterator.textWidth(thisLineStart, thisLineEnd, 0);
+    ASSERT(thisLineStart <= thisLineEnd);
+    float thisLineWidth = thisLineStart < thisLineEnd ? flowContentsIterator.textWidth(thisLineStart, thisLineEnd, 0) : 0;
     fragmentToSplit = FlowContentsIterator::TextFragment(thisLineStart, thisLineEnd, thisLineWidth, fragmentToSplit.type(), fragmentToSplit.isCollapsed(), fragmentToSplit.isBreakable());
     return FlowContentsIterator::TextFragment(nextLineStart, nextLineEnd, nextLineWidth, fragmentToSplit.type(), fragmentToSplit.isCollapsed(), fragmentToSplit.isBreakable());
 }