From bfdf52701fe1266b53ec37b5ce95bd6e572bbe8c Mon Sep 17 00:00:00 2001 From: Aliaksandr Kalenik Date: Tue, 3 Dec 2024 20:09:23 +0100 Subject: [PATCH] LibWeb: Treat min{max}-height as none if available is intrinsic [GFC] Fixes infinite recursion in following cases: - max-height: fit-content - max-height: min-content - max-height: max-content --- Libraries/LibWeb/Layout/FormattingContext.cpp | 6 ++++++ .../Layout/expected/grid/max-height-fit-content.txt | 13 +++++++++++++ .../Layout/input/grid/max-height-fit-content.html | 6 ++++++ 3 files changed, 25 insertions(+) create mode 100644 Tests/LibWeb/Layout/expected/grid/max-height-fit-content.txt create mode 100644 Tests/LibWeb/Layout/input/grid/max-height-fit-content.html diff --git a/Libraries/LibWeb/Layout/FormattingContext.cpp b/Libraries/LibWeb/Layout/FormattingContext.cpp index 660f2c672c9..0df0c517882 100644 --- a/Libraries/LibWeb/Layout/FormattingContext.cpp +++ b/Libraries/LibWeb/Layout/FormattingContext.cpp @@ -1965,6 +1965,12 @@ bool FormattingContext::should_treat_max_height_as_none(Box const& box, Availabl if (!m_state.get(*box.non_anonymous_containing_block()).has_definite_height()) return true; } + if (max_height.is_fit_content() && available_height.is_intrinsic_sizing_constraint()) + return true; + if (max_height.is_max_content() && available_height.is_max_content()) + return true; + if (max_height.is_min_content() && available_height.is_min_content()) + return true; return false; } diff --git a/Tests/LibWeb/Layout/expected/grid/max-height-fit-content.txt b/Tests/LibWeb/Layout/expected/grid/max-height-fit-content.txt new file mode 100644 index 00000000000..84ef6a01a08 --- /dev/null +++ b/Tests/LibWeb/Layout/expected/grid/max-height-fit-content.txt @@ -0,0 +1,13 @@ +Viewport <#document> at (0,0) content-size 800x600 children: not-inline + BlockContainer at (0,0) content-size 800x33 [BFC] children: not-inline + Box at (8,8) content-size 784x17 [GFC] children: not-inline + BlockContainer <(anonymous)> at (8,8) content-size 784x17 [BFC] children: inline + frag 0 from TextNode start: 0, length: 5, rect: [8,8 36.84375x17] baseline: 13.296875 + "hello" + TextNode <#text> + +ViewportPaintable (Viewport<#document>) [0,0 800x600] + PaintableWithLines (BlockContainer) [0,0 800x33] + PaintableBox (Box) [8,8 784x17] + PaintableWithLines (BlockContainer(anonymous)) [8,8 784x17] + TextPaintable (TextNode<#text>) diff --git a/Tests/LibWeb/Layout/input/grid/max-height-fit-content.html b/Tests/LibWeb/Layout/input/grid/max-height-fit-content.html new file mode 100644 index 00000000000..434a5c327d1 --- /dev/null +++ b/Tests/LibWeb/Layout/input/grid/max-height-fit-content.html @@ -0,0 +1,6 @@ +hello \ No newline at end of file