Title: [293646] trunk
Revision
293646
Author
za...@apple.com
Date
2022-04-30 08:30:19 -0700 (Sat, 30 Apr 2022)

Log Message

ASSERTION FAILED: *trailingRunIndex >= overflowingRunIndex in WebCore::Layout::InlineContentBreaker::tryBreakingNextOverflowingRuns
https://bugs.webkit.org/show_bug.cgi?id=239838
<rdar://problem/92455051>

Reviewed by Antti Koivisto.

Source/WebCore:

Take partial text overflow into account when computing intrinsic width.

Test: fast/inline/overflowing-content-inside-inline-box-crash.html

* layout/formattingContexts/inline/InlineFormattingContext.cpp:
(WebCore::Layout::InlineFormattingContext::computedIntrinsicWidthForConstraint const):
* layout/formattingContexts/inline/InlineLineBuilder.cpp:
(WebCore::Layout::LineBuilder::computedIntrinsicWidth):
* layout/formattingContexts/inline/InlineLineBuilder.h:

LayoutTests:

* fast/inline/overflowing-content-inside-inline-box-crash-expected.txt: Added.
* fast/inline/overflowing-content-inside-inline-box-crash.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (293645 => 293646)


--- trunk/LayoutTests/ChangeLog	2022-04-30 13:11:23 UTC (rev 293645)
+++ trunk/LayoutTests/ChangeLog	2022-04-30 15:30:19 UTC (rev 293646)
@@ -1,5 +1,16 @@
 2022-04-30  Alan Bujtas  <za...@apple.com>
 
+        ASSERTION FAILED: *trailingRunIndex >= overflowingRunIndex in WebCore::Layout::InlineContentBreaker::tryBreakingNextOverflowingRuns
+        https://bugs.webkit.org/show_bug.cgi?id=239838
+        <rdar://problem/92455051>
+
+        Reviewed by Antti Koivisto.
+
+        * fast/inline/overflowing-content-inside-inline-box-crash-expected.txt: Added.
+        * fast/inline/overflowing-content-inside-inline-box-crash.html: Added.
+
+2022-04-30  Alan Bujtas  <za...@apple.com>
+
         [LFC][IFC] Do not wrap </span> to the next line when it is preceded by overflowing text
         https://bugs.webkit.org/show_bug.cgi?id=239879
         <rdar://problem/92497176>

Added: trunk/LayoutTests/fast/inline/overflowing-content-inside-inline-box-crash-expected.txt (0 => 293646)


--- trunk/LayoutTests/fast/inline/overflowing-content-inside-inline-box-crash-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/inline/overflowing-content-inside-inline-box-crash-expected.txt	2022-04-30 15:30:19 UTC (rev 293646)
@@ -0,0 +1 @@
+PASSif no crash or ASSERT.

Added: trunk/LayoutTests/fast/inline/overflowing-content-inside-inline-box-crash.html (0 => 293646)


--- trunk/LayoutTests/fast/inline/overflowing-content-inside-inline-box-crash.html	                        (rev 0)
+++ trunk/LayoutTests/fast/inline/overflowing-content-inside-inline-box-crash.html	2022-04-30 15:30:19 UTC (rev 293646)
@@ -0,0 +1,15 @@
+<style>
+div {
+  position: absolute;
+  word-break: break-word;
+}
+
+.second_inline_box {
+  margin-left: 1px;
+}
+</style>
+<div><span>PASS</span><span class=second_inline_box>if no crash or ASSERT.</span></div>
+<script>
+if (window.testRunner)
+  testRunner.dumpAsText();
+</script>
\ No newline at end of file

Modified: trunk/Source/WebCore/ChangeLog (293645 => 293646)


--- trunk/Source/WebCore/ChangeLog	2022-04-30 13:11:23 UTC (rev 293645)
+++ trunk/Source/WebCore/ChangeLog	2022-04-30 15:30:19 UTC (rev 293646)
@@ -1,5 +1,23 @@
 2022-04-30  Alan Bujtas  <za...@apple.com>
 
+        ASSERTION FAILED: *trailingRunIndex >= overflowingRunIndex in WebCore::Layout::InlineContentBreaker::tryBreakingNextOverflowingRuns
+        https://bugs.webkit.org/show_bug.cgi?id=239838
+        <rdar://problem/92455051>
+
+        Reviewed by Antti Koivisto.
+
+        Take partial text overflow into account when computing intrinsic width.
+
+        Test: fast/inline/overflowing-content-inside-inline-box-crash.html
+
+        * layout/formattingContexts/inline/InlineFormattingContext.cpp:
+        (WebCore::Layout::InlineFormattingContext::computedIntrinsicWidthForConstraint const):
+        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
+        (WebCore::Layout::LineBuilder::computedIntrinsicWidth):
+        * layout/formattingContexts/inline/InlineLineBuilder.h:
+
+2022-04-30  Alan Bujtas  <za...@apple.com>
+
         [LFC][IFC] Introduce LineBuilder::PartialContent
         https://bugs.webkit.org/show_bug.cgi?id=239886
 

Modified: trunk/Source/WebCore/layout/formattingContexts/inline/InlineFormattingContext.cpp (293645 => 293646)


--- trunk/Source/WebCore/layout/formattingContexts/inline/InlineFormattingContext.cpp	2022-04-30 13:11:23 UTC (rev 293645)
+++ trunk/Source/WebCore/layout/formattingContexts/inline/InlineFormattingContext.cpp	2022-04-30 15:30:19 UTC (rev 293646)
@@ -432,9 +432,10 @@
     auto previousLine = std::optional<LineBuilder::PreviousLine> { };
     while (!layoutRange.isEmpty()) {
         auto intrinsicContent = lineBuilder.computedIntrinsicWidth(layoutRange, previousLine);
-        layoutRange.start = intrinsicContent.inlineItemRange.end;
         maximumLineWidth = std::max(maximumLineWidth, intrinsicContent.logicalWidth);
-        previousLine = LineBuilder::PreviousLine { };
+
+        layoutRange.start = !intrinsicContent.partialOverflowingContent ? intrinsicContent.inlineItemRange.end : intrinsicContent.inlineItemRange.end - 1;
+        previousLine = LineBuilder::PreviousLine { intrinsicContent.inlineItemRange, { }, { }, intrinsicContent.partialOverflowingContent };
         // FIXME: Add support for clear.
         for (auto* floatBox : intrinsicContent.floats)
             maximumFloatWidth += geometryForBox(*floatBox).marginBoxWidth();

Modified: trunk/Source/WebCore/layout/formattingContexts/inline/InlineLineBuilder.cpp (293645 => 293646)


--- trunk/Source/WebCore/layout/formattingContexts/inline/InlineLineBuilder.cpp	2022-04-30 13:11:23 UTC (rev 293645)
+++ trunk/Source/WebCore/layout/formattingContexts/inline/InlineLineBuilder.cpp	2022-04-30 15:30:19 UTC (rev 293646)
@@ -407,7 +407,10 @@
     auto committedContent = placeInlineContent(needsLayoutRange);
     auto committedRange = close(needsLayoutRange, committedContent);
     auto lineWidth = lineConstraints.logicalRect.left() + lineConstraints.marginStart + m_line.contentLogicalWidth();
-    return { committedRange, lineWidth, m_floats };
+    auto overflow = std::optional<PartialContent> { };
+    if (committedContent.partialTrailingContentLength)
+        overflow = { committedContent.partialTrailingContentLength, committedContent.overflowLogicalWidth };
+    return { committedRange, lineWidth, overflow, m_floats };
 }
 
 void LineBuilder::initialize(const UsedConstraints& lineConstraints, size_t leadingInlineItemIndex, const std::optional<PreviousLine>& previousLine)

Modified: trunk/Source/WebCore/layout/formattingContexts/inline/InlineLineBuilder.h (293645 => 293646)


--- trunk/Source/WebCore/layout/formattingContexts/inline/InlineLineBuilder.h	2022-04-30 13:11:23 UTC (rev 293645)
+++ trunk/Source/WebCore/layout/formattingContexts/inline/InlineLineBuilder.h	2022-04-30 15:30:19 UTC (rev 293646)
@@ -62,7 +62,7 @@
         TextDirection inlineBaseDirection { TextDirection::LTR };
         std::optional<PartialContent> partialOverflowingContent { };
         // Content width measured during line breaking (avoid double-measuring).
-        std::optional<InlineLayoutUnit> trailingOverflowingContentWidth;
+        std::optional<InlineLayoutUnit> trailingOverflowingContentWidth { };
     };
     using FloatList = Vector<const Box*>;
     struct LineContent {
@@ -88,6 +88,7 @@
     struct IntrinsicContent {
         InlineItemRange inlineItemRange;
         InlineLayoutUnit logicalWidth { 0 };
+        std::optional<PartialContent> partialOverflowingContent { };
         const FloatList& floats;
     };
     IntrinsicContent computedIntrinsicWidth(const InlineItemRange&, const std::optional<PreviousLine>&);
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to