Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: e188ce4e6d0fb7a15d2c43f5081c11105b8da7b9
https://github.com/WebKit/WebKit/commit/e188ce4e6d0fb7a15d2c43f5081c11105b8da7b9
Author: Alan Baradlay <[email protected]>
Date: 2023-01-16 (Mon, 16 Jan 2023)
Changed paths:
M Source/WebCore/layout/formattingContexts/inline/InlineLineBox.cpp
M Source/WebCore/layout/formattingContexts/inline/InlineLineBox.h
M Source/WebCore/layout/formattingContexts/inline/InlineLineBoxBuilder.cpp
M Source/WebCore/layout/formattingContexts/inline/InlineLineBoxBuilder.h
M
Source/WebCore/layout/formattingContexts/inline/InlineLineBoxVerticalAligner.cpp
M
Source/WebCore/layout/formattingContexts/inline/display/InlineDisplayContentBuilder.cpp
Log Message:
-----------
[IFC] LineBox::inlineLevelBoxFor may return null_ptr
https://bugs.webkit.org/show_bug.cgi?id=250663
Reviewed by Antti Koivisto.
LineBox::inlineLevelBoxForLayoutBox() assumes it gets always called with a
layoutBox present on the current line.
webkit.org/b/249942 showed that it's rather easy to call this function with
incorrect layoutBox (not on the current line).
This patch addresses this issue by changing the return type of
LineBox::inlineLevelBoxForLayoutBox from InlineLevelBox& to InlineLevelBox*
and return null_ptr if the layout box cannot be found on the current line box.
However this patch also extends LineBox interface with additional helper
functions where the argument type makes such calls less error prone.
->
parentInlineBox(const InlineLevelBox&)
parentInlineBox(const Line::Run&);
inlineLevelBoxFor(const Line::Run&);
as many of the inlineLevelBoxForLayoutBox() call sites are actually interested
in
1. the parent inline box (which we always have).
2. inline boxes based on actual runs on the line.
* Source/WebCore/layout/formattingContexts/inline/InlineLineBox.cpp:
(WebCore::Layout::LineBox::logicalRectForTextRun const):
(WebCore::Layout::LineBox::inlineLevelBoxAbsoluteTop const):
(WebCore::Layout::LineBox::logicalRectForInlineLevelBox const):
* Source/WebCore/layout/formattingContexts/inline/InlineLineBox.h:
(WebCore::Layout::LineBox::inlineLevelBoxFor const):
(WebCore::Layout::LineBox::inlineBoxFor const):
(WebCore::Layout::LineBox::parentInlineBox const):
(WebCore::Layout::LineBox::inlineLevelBoxFor):
(WebCore::Layout::LineBox::parentInlineBox):
(WebCore::Layout::LineBox::inlineBoxFor):
(WebCore::Layout::LineBox::inlineLevelBoxForLayoutBox const): Deleted.
(WebCore::Layout::LineBox::inlineLevelBoxForLayoutBox): Deleted.
* Source/WebCore/layout/formattingContexts/inline/InlineLineBoxBuilder.cpp:
(WebCore::Layout::LineBoxBuilder::setVerticalPropertiesForInlineLevelBox const):
(WebCore::Layout::LineBoxBuilder::constructInlineLevelBoxes):
(WebCore::Layout::LineBoxBuilder::adjustInlineBoxHeightsForLineBoxContainIfApplicable):
(WebCore::Layout::LineBoxBuilder::adjustOutsideListMarkersPosition):
* Source/WebCore/layout/formattingContexts/inline/InlineLineBoxBuilder.h:
*
Source/WebCore/layout/formattingContexts/inline/InlineLineBoxVerticalAligner.cpp:
(WebCore::Layout::LineBoxVerticalAligner::computeLineBoxLogicalHeight const):
(WebCore::Layout::LineBoxVerticalAligner::computeRootInlineBoxVerticalPosition
const):
(WebCore::Layout::LineBoxVerticalAligner::alignInlineLevelBoxes const):
*
Source/WebCore/layout/formattingContexts/inline/display/InlineDisplayContentBuilder.cpp:
(WebCore::Layout::InlineDisplayContentBuilder::processNonBidiContent):
(WebCore::Layout::InlineDisplayContentBuilder::adjustVisualGeometryForDisplayBox):
(WebCore::Layout::InlineDisplayContentBuilder::processBidiContent):
Canonical link: https://commits.webkit.org/258954@main
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes