summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRyosuke Niwa <rniwa@webkit.org>2014-10-14 15:00:11 +0200
committerAllan Sandfeld Jensen <allan.jensen@digia.com>2014-10-14 17:18:43 +0200
commitf4f6ca3c19dcea8160044b0aec87e59bfaf8d5c5 (patch)
tree1890805193458a26a0688ac29830502598d84392
parent520572a67c4e747583792b256702c488b74bff3d (diff)
downloadqtwebkit-f4f6ca3c19dcea8160044b0aec87e59bfaf8d5c5.tar.gz
Crash in WebCore::BidiResolver<WebCore::InlineIterator, WebCore::BidiRun>::createBidiRunsForLine
https://bugs.webkit.org/show_bug.cgi?id=122776 Reviewed by Darin Adler. Merge https://chromium.googlesource.com/chromium/blink/+/aca89bc4d984705a1f94b623dae0ab03e239a248 Fix modification of whitespace endpoints to not assume it's operating on RenderTexts During line layout, we use midpoints to identify RenderObjects, or parts of RenderObjects, that don't need InlineBoxes, usually because of collapsed whitespace. Prior to actually creating BidiRuns (the precursor to InlineBoxes), we use checkMidpoints to fix up our lineMidpointState to handle the case where we start ignoring spaces in our line, but don't stop until somewhere on the following line. Previously, this function assumed that the final midpoint (called an endpoint) was a RenderText, but this assumption is wrong if we have a beginning midpoint created by shouldSkipWhitespaceAfterStartObject (which handles inlines and list markers) and no endpoint on that line. In that case, we'd instead adjust the position backwards on the beginning midpoint, which would cause us to fail to create an InlineBox for the inline or list marker. In the new test added, this would actually trigger a crash due to an assumption when visually re-ordering BidiRuns that a non-empty line would actually contain at least one such run. Test: fast/text/whitespace/whitespace-and-margin-wrap-after-list-marker-crash.html * rendering/RenderBlockLineLayout.cpp: (WebCore::checkMidpoints): Change-Id: I894bd9da4250dc2c79a55a8014e54df7dcbec719 git-svn-id: http://svn.webkit.org/repository/webkit/trunk@157436 268f45cc-cd09-0410-ab3c-d52691b4dbfc Reviewed-by: Michael Bruning <michael.bruning@digia.com>
-rw-r--r--Source/WebCore/rendering/RenderBlockLineLayout.cpp2
1 files changed, 1 insertions, 1 deletions
diff --git a/Source/WebCore/rendering/RenderBlockLineLayout.cpp b/Source/WebCore/rendering/RenderBlockLineLayout.cpp
index 8550ca495..c6f283a73 100644
--- a/Source/WebCore/rendering/RenderBlockLineLayout.cpp
+++ b/Source/WebCore/rendering/RenderBlockLineLayout.cpp
@@ -423,7 +423,7 @@ static void checkMidpoints(LineMidpointState& lineMidpointState, InlineIterator&
if (currpoint == lBreak) {
// We hit the line break before the start point. Shave off the start point.
lineMidpointState.numMidpoints--;
- if (endpoint.m_obj->style()->collapseWhiteSpace())
+ if (endpoint.m_obj->style()->collapseWhiteSpace() && endpoint.m_obj->isText())
endpoint.m_pos--;
}
}