diff options
author | Aliaksandr Kalenik <kalenik.aliaksandr@gmail.com> | 2023-04-28 19:26:04 +0300 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2023-04-29 06:46:45 +0200 |
commit | 9fd51a59ffcd6e7982af86991a870324dff2eb4b (patch) | |
tree | aed0c42ab45967875f0d6fce98d1468552f40aa1 | |
parent | 77a5f40736c658379fdead4284fa2fcaf98ca36f (diff) | |
download | serenity-9fd51a59ffcd6e7982af86991a870324dff2eb4b.zip |
LibWeb: Fix division by zero in table columns width distribution
If total max columns width (grid_max) is zero then available width
should be divided equally between columns. Previously there was
division by zero: `column.max_width / grid_max`.
3 files changed, 33 insertions, 2 deletions
diff --git a/Tests/LibWeb/Layout/expected/table/zero-columns-gridmax.txt b/Tests/LibWeb/Layout/expected/table/zero-columns-gridmax.txt new file mode 100644 index 0000000000..22f0923aa2 --- /dev/null +++ b/Tests/LibWeb/Layout/expected/table/zero-columns-gridmax.txt @@ -0,0 +1,7 @@ +Viewport <#document> at (0,0) content-size 800x600 children: not-inline + BlockContainer <html> at (0,0) content-size 800x16 children: not-inline + BlockContainer <body> at (8,8) content-size 784x0 children: not-inline + TableWrapper <(anonymous)> at (8,8) content-size 200x0 children: not-inline + TableBox <div.table> at (8,8) content-size 200x0 children: not-inline + TableRowBox <div.row> at (8,8) content-size 200x0 children: not-inline + TableCellBox <div.cell> at (8,8) content-size 200x0 children: not-inline diff --git a/Tests/LibWeb/Layout/input/table/zero-columns-gridmax.html b/Tests/LibWeb/Layout/input/table/zero-columns-gridmax.html new file mode 100644 index 0000000000..63bfe96918 --- /dev/null +++ b/Tests/LibWeb/Layout/input/table/zero-columns-gridmax.html @@ -0,0 +1,15 @@ +<style> +.table { + display: table; + width: 200px; +} + +.row { + display: table-row; +} + +.cell { + display: table-cell; +} +</style> +<div class="table"><div class="row"><div class="cell"></div></div></div>
\ No newline at end of file diff --git a/Userland/Libraries/LibWeb/Layout/TableFormattingContext.cpp b/Userland/Libraries/LibWeb/Layout/TableFormattingContext.cpp index 354502fb3a..c3c565f24c 100644 --- a/Userland/Libraries/LibWeb/Layout/TableFormattingContext.cpp +++ b/Userland/Libraries/LibWeb/Layout/TableFormattingContext.cpp @@ -358,8 +358,17 @@ void TableFormattingContext::distribute_width_to_columns() } auto width_to_distribute = available_width - columns_total_used_width(); - for (auto& column : m_columns) { - column.used_width += width_to_distribute * column.max_width / grid_max; + if (grid_max == 0) { + // If total max width of columns is zero then divide distributable width equally among them + auto column_width = width_to_distribute / m_columns.size(); + for (auto& column : m_columns) { + column.used_width = column_width; + } + } else { + // Distribute width to columns proportionally to their max width + for (auto& column : m_columns) { + column.used_width += width_to_distribute * column.max_width / grid_max; + } } } } |