Changeset 293646 in webkit


Ignore:
Timestamp:
Apr 30, 2022 8:30:19 AM (2 years ago)
Author:
Alan Bujtas
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.
Location:
trunk
Files:
2 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r293644 r293646  
     12022-04-30  Alan Bujtas  <zalan@apple.com>
     2
     3        ASSERTION FAILED: *trailingRunIndex >= overflowingRunIndex in WebCore::Layout::InlineContentBreaker::tryBreakingNextOverflowingRuns
     4        https://bugs.webkit.org/show_bug.cgi?id=239838
     5        <rdar://problem/92455051>
     6
     7        Reviewed by Antti Koivisto.
     8
     9        * fast/inline/overflowing-content-inside-inline-box-crash-expected.txt: Added.
     10        * fast/inline/overflowing-content-inside-inline-box-crash.html: Added.
     11
    1122022-04-30  Alan Bujtas  <zalan@apple.com>
    213
  • trunk/Source/WebCore/ChangeLog

    r293645 r293646  
     12022-04-30  Alan Bujtas  <zalan@apple.com>
     2
     3        ASSERTION FAILED: *trailingRunIndex >= overflowingRunIndex in WebCore::Layout::InlineContentBreaker::tryBreakingNextOverflowingRuns
     4        https://bugs.webkit.org/show_bug.cgi?id=239838
     5        <rdar://problem/92455051>
     6
     7        Reviewed by Antti Koivisto.
     8
     9        Take partial text overflow into account when computing intrinsic width.
     10
     11        Test: fast/inline/overflowing-content-inside-inline-box-crash.html
     12
     13        * layout/formattingContexts/inline/InlineFormattingContext.cpp:
     14        (WebCore::Layout::InlineFormattingContext::computedIntrinsicWidthForConstraint const):
     15        * layout/formattingContexts/inline/InlineLineBuilder.cpp:
     16        (WebCore::Layout::LineBuilder::computedIntrinsicWidth):
     17        * layout/formattingContexts/inline/InlineLineBuilder.h:
     18
    1192022-04-30  Alan Bujtas  <zalan@apple.com>
    220
  • trunk/Source/WebCore/layout/formattingContexts/inline/InlineFormattingContext.cpp

    r293645 r293646  
    433433    while (!layoutRange.isEmpty()) {
    434434        auto intrinsicContent = lineBuilder.computedIntrinsicWidth(layoutRange, previousLine);
    435         layoutRange.start = intrinsicContent.inlineItemRange.end;
    436435        maximumLineWidth = std::max(maximumLineWidth, intrinsicContent.logicalWidth);
    437         previousLine = LineBuilder::PreviousLine { };
     436
     437        layoutRange.start = !intrinsicContent.partialOverflowingContent ? intrinsicContent.inlineItemRange.end : intrinsicContent.inlineItemRange.end - 1;
     438        previousLine = LineBuilder::PreviousLine { intrinsicContent.inlineItemRange, { }, { }, intrinsicContent.partialOverflowingContent };
    438439        // FIXME: Add support for clear.
    439440        for (auto* floatBox : intrinsicContent.floats)
  • trunk/Source/WebCore/layout/formattingContexts/inline/InlineLineBuilder.cpp

    r293645 r293646  
    408408    auto committedRange = close(needsLayoutRange, committedContent);
    409409    auto lineWidth = lineConstraints.logicalRect.left() + lineConstraints.marginStart + m_line.contentLogicalWidth();
    410     return { committedRange, lineWidth, m_floats };
     410    auto overflow = std::optional<PartialContent> { };
     411    if (committedContent.partialTrailingContentLength)
     412        overflow = { committedContent.partialTrailingContentLength, committedContent.overflowLogicalWidth };
     413    return { committedRange, lineWidth, overflow, m_floats };
    411414}
    412415
  • trunk/Source/WebCore/layout/formattingContexts/inline/InlineLineBuilder.h

    r293645 r293646  
    6363        std::optional<PartialContent> partialOverflowingContent { };
    6464        // Content width measured during line breaking (avoid double-measuring).
    65         std::optional<InlineLayoutUnit> trailingOverflowingContentWidth;
     65        std::optional<InlineLayoutUnit> trailingOverflowingContentWidth { };
    6666    };
    6767    using FloatList = Vector<const Box*>;
     
    8989        InlineItemRange inlineItemRange;
    9090        InlineLayoutUnit logicalWidth { 0 };
     91        std::optional<PartialContent> partialOverflowingContent { };
    9192        const FloatList& floats;
    9293    };
Note: See TracChangeset for help on using the changeset viewer.