From 3d83f676c4a9a83bfecf708c1506b38d1927e0f2 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Thu, 6 Jul 2023 14:38:46 +0200 Subject: [PATCH] LibWeb: Resolve inline-block percentage padding against 0, not infinity When the containing block has an indefinite width, any descendants with a percentage size should resolve that against 0, not infinity. Fixes an assertion failure when loading https://www.gnu.org/ --- ...nline-block-with-indefinite-containing-block-size.txt | 6 ++++++ ...line-block-with-indefinite-containing-block-size.html | 9 +++++++++ .../Libraries/LibWeb/Layout/InlineFormattingContext.cpp | 2 +- 3 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 Tests/LibWeb/Layout/expected/block-and-inline/percentage-padding-on-inline-block-with-indefinite-containing-block-size.txt create mode 100644 Tests/LibWeb/Layout/input/block-and-inline/percentage-padding-on-inline-block-with-indefinite-containing-block-size.html diff --git a/Tests/LibWeb/Layout/expected/block-and-inline/percentage-padding-on-inline-block-with-indefinite-containing-block-size.txt b/Tests/LibWeb/Layout/expected/block-and-inline/percentage-padding-on-inline-block-with-indefinite-containing-block-size.txt new file mode 100644 index 00000000000000..13f311acaf94da --- /dev/null +++ b/Tests/LibWeb/Layout/expected/block-and-inline/percentage-padding-on-inline-block-with-indefinite-containing-block-size.txt @@ -0,0 +1,6 @@ +Viewport <#document> at (0,0) content-size 800x600 children: not-inline + BlockContainer at (0,0) content-size 800x33.46875 [BFC] children: not-inline + BlockContainer at (8,8) content-size 0x17.46875 children: inline + line 0 width: 0, height: 17.46875, bottom: 17.46875, baseline: 13.53125 + frag 0 from BlockContainer start: 0, length: 0, rect: [8,21 0x0] + BlockContainer
at (8,21) content-size 0x0 inline-block [BFC] children: not-inline diff --git a/Tests/LibWeb/Layout/input/block-and-inline/percentage-padding-on-inline-block-with-indefinite-containing-block-size.html b/Tests/LibWeb/Layout/input/block-and-inline/percentage-padding-on-inline-block-with-indefinite-containing-block-size.html new file mode 100644 index 00000000000000..3a03a9ad073826 --- /dev/null +++ b/Tests/LibWeb/Layout/input/block-and-inline/percentage-padding-on-inline-block-with-indefinite-containing-block-size.html @@ -0,0 +1,9 @@ +
\ No newline at end of file diff --git a/Userland/Libraries/LibWeb/Layout/InlineFormattingContext.cpp b/Userland/Libraries/LibWeb/Layout/InlineFormattingContext.cpp index 24b585d31ab8f2..4ae23ea0f45b5c 100644 --- a/Userland/Libraries/LibWeb/Layout/InlineFormattingContext.cpp +++ b/Userland/Libraries/LibWeb/Layout/InlineFormattingContext.cpp @@ -89,7 +89,7 @@ void InlineFormattingContext::run(Box const&, LayoutMode layout_mode, AvailableS void InlineFormattingContext::dimension_box_on_line(Box const& box, LayoutMode layout_mode) { - auto width_of_containing_block = m_available_space->width.to_px(); + auto width_of_containing_block = m_available_space->width.to_px_or_zero(); auto& box_state = m_state.get_mutable(box); auto const& computed_values = box.computed_values();