mirror of
https://github.com/fergalmoran/ladybird.git
synced 2026-01-06 16:45:03 +00:00
LibWeb: Fix infinite recursion when grid has "max-width: max-content"
With this change "max-width: max-content" is treated as "none" when the available width is also "max-content". This fix prevents a stack overflow in the grid track size maximization algorithm by avoiding recursive calls to calculate_max_width() when determining the maximum grid container size.
This commit is contained in:
committed by
Andreas Kling
parent
8e2102fb73
commit
aee5120078
@@ -1197,16 +1197,19 @@ void GridFormattingContext::maximize_tracks(GridDimension const dimension)
|
||||
return should_treat_max_width_as_none(grid_container(), available_size);
|
||||
return !computed_values.max_height().is_auto();
|
||||
}();
|
||||
auto maximum_size = calculate_grid_container_maximum_size(dimension);
|
||||
if (!should_treat_grid_container_maximum_size_as_none && grid_container_inner_size > maximum_size) {
|
||||
for (size_t i = 0; i < tracks.size(); i++)
|
||||
tracks[i].base_size = saved_base_sizes[i];
|
||||
auto available_space_with_max_width = *m_available_space;
|
||||
if (dimension == GridDimension::Column)
|
||||
available_space_with_max_width.width = AvailableSize::make_definite(maximum_size);
|
||||
else
|
||||
available_space_with_max_width.height = AvailableSize::make_definite(maximum_size);
|
||||
maximize_tracks_using_available_size(available_space_with_max_width, dimension);
|
||||
|
||||
if (!should_treat_grid_container_maximum_size_as_none) {
|
||||
auto maximum_size = calculate_grid_container_maximum_size(dimension);
|
||||
if (grid_container_inner_size > maximum_size) {
|
||||
for (size_t i = 0; i < tracks.size(); i++)
|
||||
tracks[i].base_size = saved_base_sizes[i];
|
||||
auto available_space_with_max_width = *m_available_space;
|
||||
if (dimension == GridDimension::Column)
|
||||
available_space_with_max_width.width = AvailableSize::make_definite(maximum_size);
|
||||
else
|
||||
available_space_with_max_width.height = AvailableSize::make_definite(maximum_size);
|
||||
maximize_tracks_using_available_size(available_space_with_max_width, dimension);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user