at (10,10) content-size 0x19.46875 table-row children: not-inline
+ BlockContainer <(anonymous)> (not painted) children: inline
+ TextNode <#text>
+ BlockContainer at (11,11) content-size 0x17.46875 table-cell [BFC] children: inline
+ line 0 width: 14.265625, height: 17.46875, bottom: 17.46875, baseline: 13.53125
+ frag 0 from TextNode start: 0, length: 1, rect: [11,11 14.265625x17.46875]
+ "A"
+ TextNode <#text>
+ BlockContainer <(anonymous)> (not painted) children: inline
+ TextNode <#text>
+ BlockContainer <(anonymous)> (not painted) children: inline
+ TextNode <#text>
+ BlockContainer <(anonymous)> (not painted) children: inline
+ TextNode <#text>
diff --git a/Tests/LibWeb/Layout/input/table/avoid-div-by-zero-in-table-measures.html b/Tests/LibWeb/Layout/input/table/avoid-div-by-zero-in-table-measures.html
new file mode 100644
index 0000000000..5eb115e602
--- /dev/null
+++ b/Tests/LibWeb/Layout/input/table/avoid-div-by-zero-in-table-measures.html
@@ -0,0 +1,7 @@
+
\ No newline at end of file
diff --git a/Userland/Libraries/LibWeb/Layout/TableFormattingContext.cpp b/Userland/Libraries/LibWeb/Layout/TableFormattingContext.cpp
index d948085b76..ac47709536 100644
--- a/Userland/Libraries/LibWeb/Layout/TableFormattingContext.cpp
+++ b/Userland/Libraries/LibWeb/Layout/TableFormattingContext.cpp
@@ -495,8 +495,10 @@ void TableFormattingContext::compute_table_measures()
// the product of:
// - the ratio of the max-content size based on cells of span up to N-1 of the column to the baseline max-content size
// - the outer min-content size of the cell minus the baseline max-content size and baseline border spacing, or 0 if this is negative
- cell_min_contribution += (rows_or_columns[rc_index].max_size / static_cast(baseline_max_content_size))
- * max(CSSPixels(0), cell_min_size(cell) - baseline_max_content_size - baseline_border_spacing);
+ if (baseline_max_content_size != 0) {
+ cell_min_contribution += (rows_or_columns[rc_index].max_size / static_cast(baseline_max_content_size))
+ * max(CSSPixels(0), cell_min_size(cell) - baseline_max_content_size - baseline_border_spacing);
+ }
// The contribution of the cell is the sum of:
// the max-content size of the column based on cells of span up to N-1
@@ -504,8 +506,10 @@ void TableFormattingContext::compute_table_measures()
// and the product of:
// - the ratio of the max-content size based on cells of span up to N-1 of the column to the baseline max-content size
// - the outer max-content size of the cell minus the baseline max-content size and the baseline border spacing, or 0 if this is negative
- cell_max_contribution += (rows_or_columns[rc_index].max_size / static_cast(baseline_max_content_size))
- * max(CSSPixels(0), cell_max_size(cell) - baseline_max_content_size - baseline_border_spacing);
+ if (baseline_max_content_size != 0) {
+ cell_max_contribution += (rows_or_columns[rc_index].max_size / static_cast(baseline_max_content_size))
+ * max(CSSPixels(0), cell_max_size(cell) - baseline_max_content_size - baseline_border_spacing);
+ }
cell_min_contributions_by_rc_index[rc_index].append(cell_min_contribution);
cell_max_contributions_by_rc_index[rc_index].append(cell_max_contribution);
}
|