From 057e643a635f541b7f0f1686dda319b2bbdbadac Mon Sep 17 00:00:00 2001 From: Aliaksandr Kalenik Date: Mon, 24 Mar 2025 13:52:55 +0000 Subject: [PATCH] LibWeb: Don't assume length-percentage is always a length [GFC] Fixes crashing when trying to get length from LengthPercentage with percentage value. --- Libraries/LibWeb/Layout/GridFormattingContext.cpp | 2 +- .../Layout/expected/grid/minmax-with-percentage-max.txt | 7 +++++++ .../Layout/input/grid/minmax-with-percentage-max.html | 6 ++++++ 3 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 Tests/LibWeb/Layout/expected/grid/minmax-with-percentage-max.txt create mode 100644 Tests/LibWeb/Layout/input/grid/minmax-with-percentage-max.html diff --git a/Libraries/LibWeb/Layout/GridFormattingContext.cpp b/Libraries/LibWeb/Layout/GridFormattingContext.cpp index f169bd4cc48..6c951ca2940 100644 --- a/Libraries/LibWeb/Layout/GridFormattingContext.cpp +++ b/Libraries/LibWeb/Layout/GridFormattingContext.cpp @@ -2563,7 +2563,7 @@ CSSPixels GridFormattingContext::content_based_minimum_size(GridItem const& item spans_only_tracks_with_limited_max_track_sizing_function = false; break; } - sum_of_max_sizing_functions += track.max_track_sizing_function.length_percentage().length().to_px(item.box); + sum_of_max_sizing_functions += track.max_track_sizing_function.length_percentage().to_px(item.box, m_available_space->width.to_px_or_zero()); } if (spans_only_tracks_with_limited_max_track_sizing_function) { result = min(result, sum_of_max_sizing_functions); diff --git a/Tests/LibWeb/Layout/expected/grid/minmax-with-percentage-max.txt b/Tests/LibWeb/Layout/expected/grid/minmax-with-percentage-max.txt new file mode 100644 index 00000000000..340c82c1719 --- /dev/null +++ b/Tests/LibWeb/Layout/expected/grid/minmax-with-percentage-max.txt @@ -0,0 +1,7 @@ +Viewport <#document> at (0,0) content-size 800x600 children: not-inline + Box at (0,0) content-size 800x16 [GFC] children: not-inline + BlockContainer at (8,8) content-size 184x0 [BFC] children: not-inline + +ViewportPaintable (Viewport<#document>) [0,0 800x600] + PaintableBox (Box) [0,0 800x16] + PaintableWithLines (BlockContainer) [8,8 184x0] diff --git a/Tests/LibWeb/Layout/input/grid/minmax-with-percentage-max.html b/Tests/LibWeb/Layout/input/grid/minmax-with-percentage-max.html new file mode 100644 index 00000000000..508eaed1900 --- /dev/null +++ b/Tests/LibWeb/Layout/input/grid/minmax-with-percentage-max.html @@ -0,0 +1,6 @@ + \ No newline at end of file