diff options
author | bors-servo <metajack+bors@gmail.com> | 2015-08-18 05:15:12 -0600 |
---|---|---|
committer | bors-servo <metajack+bors@gmail.com> | 2015-08-18 05:15:12 -0600 |
commit | 3d0951cf256ec07b427eaa2305b85da7a7645359 (patch) | |
tree | 8dd1f1ffd4d844e62ca26b0be8ef21857e63ec48 | |
parent | 5b3d3514c1b6fa010a4a5905e01cd2913538a07e (diff) | |
parent | d885958621b728ddb7b9f2296a87c55bf8d61951 (diff) | |
download | servo-3d0951cf256ec07b427eaa2305b85da7a7645359.tar.gz servo-3d0951cf256ec07b427eaa2305b85da7a7645359.zip |
Auto merge of #7243 - nox:border-collapse-panic, r=pcwalton
Avoid a panic when handling collapsing borders (fixes #7144)
There is no need to compute next_collapsed_borders_in_block_direction for all kind of flows when it's used only in the table row case. That also avoids a panic when the next child is a table colgroup (this should not happen when iterating over a table row).
<!-- Reviewable:start -->
[<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/7243)
<!-- Reviewable:end -->
16 files changed, 28 insertions, 59 deletions
diff --git a/components/layout/table.rs b/components/layout/table.rs index c3c63b85762..d9d65604c10 100644 --- a/components/layout/table.rs +++ b/components/layout/table.rs @@ -262,32 +262,6 @@ impl Flow for TableFlow { { let mut iterator = self.block_flow.base.child_iter().peekable(); while let Some(kid) = iterator.next() { - let next_index_and_sibling = iterator.peek(); - let next_collapsed_borders_in_block_direction = if collapsing_borders { - match next_index_and_sibling { - Some(next_sibling) => { - if next_sibling.is_table_rowgroup() { - NextBlockCollapsedBorders::FromNextRow( - &next_sibling.as_immutable_table_rowgroup() - .preliminary_collapsed_borders - .block_start) - } else { - NextBlockCollapsedBorders::FromNextRow( - &next_sibling.as_immutable_table_row() - .preliminary_collapsed_borders - .block_start) - } - } - None => { - NextBlockCollapsedBorders::FromTable( - CollapsedBorder::block_end(&*self.block_flow.fragment.style, - CollapsedBorderProvenance::FromTable)) - } - } - } else { - NextBlockCollapsedBorders::NotCollapsingBorders - }; - if kid.is_table_colgroup() { for specified_inline_size in &kid.as_table_colgroup().inline_sizes { self.column_intrinsic_inline_sizes.push(ColumnIntrinsicInlineSize { @@ -313,6 +287,28 @@ impl Flow for TableFlow { first_row, self.table_layout); if collapsing_borders { + let next_index_and_sibling = iterator.peek(); + let next_collapsed_borders_in_block_direction = + match next_index_and_sibling { + Some(next_sibling) => { + if next_sibling.is_table_rowgroup() { + NextBlockCollapsedBorders::FromNextRow( + &next_sibling.as_immutable_table_rowgroup() + .preliminary_collapsed_borders + .block_start) + } else { + NextBlockCollapsedBorders::FromNextRow( + &next_sibling.as_immutable_table_row() + .preliminary_collapsed_borders + .block_start) + } + } + None => { + NextBlockCollapsedBorders::FromTable( + CollapsedBorder::block_end(&*self.block_flow.fragment.style, + CollapsedBorderProvenance::FromTable)) + } + }; perform_border_collapse_for_row( kid.as_table_row(), table_inline_collapsed_borders.as_ref().unwrap(), diff --git a/tests/wpt/metadata-css/css21_dev/html4/border-collapse-dynamic-colgroup-001.htm.ini b/tests/wpt/metadata-css/css21_dev/html4/border-collapse-dynamic-colgroup-001.htm.ini deleted file mode 100644 index f140eedb72b..00000000000 --- a/tests/wpt/metadata-css/css21_dev/html4/border-collapse-dynamic-colgroup-001.htm.ini +++ /dev/null @@ -1,3 +0,0 @@ -[border-collapse-dynamic-colgroup-001.htm] - type: reftest - expected: TIMEOUT diff --git a/tests/wpt/metadata-css/css21_dev/html4/border-collapse-dynamic-colgroup-002.htm.ini b/tests/wpt/metadata-css/css21_dev/html4/border-collapse-dynamic-colgroup-002.htm.ini deleted file mode 100644 index 67d4fcd6b14..00000000000 --- a/tests/wpt/metadata-css/css21_dev/html4/border-collapse-dynamic-colgroup-002.htm.ini +++ /dev/null @@ -1,3 +0,0 @@ -[border-collapse-dynamic-colgroup-002.htm] - type: reftest - expected: TIMEOUT diff --git a/tests/wpt/metadata-css/css21_dev/html4/border-collapse-dynamic-colgroup-003.htm.ini b/tests/wpt/metadata-css/css21_dev/html4/border-collapse-dynamic-colgroup-003.htm.ini deleted file mode 100644 index ea32d538745..00000000000 --- a/tests/wpt/metadata-css/css21_dev/html4/border-collapse-dynamic-colgroup-003.htm.ini +++ /dev/null @@ -1,3 +0,0 @@ -[border-collapse-dynamic-colgroup-003.htm] - type: reftest - expected: TIMEOUT diff --git a/tests/wpt/metadata-css/css21_dev/html4/border-collapse-dynamic-column-001.htm.ini b/tests/wpt/metadata-css/css21_dev/html4/border-collapse-dynamic-column-001.htm.ini deleted file mode 100644 index 3857d1d79d9..00000000000 --- a/tests/wpt/metadata-css/css21_dev/html4/border-collapse-dynamic-column-001.htm.ini +++ /dev/null @@ -1,3 +0,0 @@ -[border-collapse-dynamic-column-001.htm] - type: reftest - expected: TIMEOUT diff --git a/tests/wpt/metadata-css/css21_dev/html4/border-collapse-dynamic-column-002.htm.ini b/tests/wpt/metadata-css/css21_dev/html4/border-collapse-dynamic-column-002.htm.ini deleted file mode 100644 index 255dadecb46..00000000000 --- a/tests/wpt/metadata-css/css21_dev/html4/border-collapse-dynamic-column-002.htm.ini +++ /dev/null @@ -1,3 +0,0 @@ -[border-collapse-dynamic-column-002.htm] - type: reftest - expected: TIMEOUT diff --git a/tests/wpt/metadata-css/css21_dev/html4/border-collapse-dynamic-column-003.htm.ini b/tests/wpt/metadata-css/css21_dev/html4/border-collapse-dynamic-column-003.htm.ini deleted file mode 100644 index f4850174a2a..00000000000 --- a/tests/wpt/metadata-css/css21_dev/html4/border-collapse-dynamic-column-003.htm.ini +++ /dev/null @@ -1,3 +0,0 @@ -[border-collapse-dynamic-column-003.htm] - type: reftest - expected: TIMEOUT diff --git a/tests/wpt/metadata-css/css21_dev/html4/border-collapse-dynamic-table-001.htm.ini b/tests/wpt/metadata-css/css21_dev/html4/border-collapse-dynamic-table-001.htm.ini deleted file mode 100644 index a780b0b90be..00000000000 --- a/tests/wpt/metadata-css/css21_dev/html4/border-collapse-dynamic-table-001.htm.ini +++ /dev/null @@ -1,3 +0,0 @@ -[border-collapse-dynamic-table-001.htm] - type: reftest - expected: TIMEOUT diff --git a/tests/wpt/metadata-css/css21_dev/html4/border-collapse-dynamic-table-002.htm.ini b/tests/wpt/metadata-css/css21_dev/html4/border-collapse-dynamic-table-002.htm.ini deleted file mode 100644 index 14411d5217d..00000000000 --- a/tests/wpt/metadata-css/css21_dev/html4/border-collapse-dynamic-table-002.htm.ini +++ /dev/null @@ -1,3 +0,0 @@ -[border-collapse-dynamic-table-002.htm] - type: reftest - expected: TIMEOUT diff --git a/tests/wpt/metadata-css/css21_dev/html4/border-collapse-dynamic-table-003.htm.ini b/tests/wpt/metadata-css/css21_dev/html4/border-collapse-dynamic-table-003.htm.ini deleted file mode 100644 index 5f65c1334a4..00000000000 --- a/tests/wpt/metadata-css/css21_dev/html4/border-collapse-dynamic-table-003.htm.ini +++ /dev/null @@ -1,3 +0,0 @@ -[border-collapse-dynamic-table-003.htm] - type: reftest - expected: TIMEOUT diff --git a/tests/wpt/metadata-css/css21_dev/html4/table-backgrounds-bc-cell-001.htm.ini b/tests/wpt/metadata-css/css21_dev/html4/table-backgrounds-bc-cell-001.htm.ini index eaabde19ad7..e2d3b53d223 100644 --- a/tests/wpt/metadata-css/css21_dev/html4/table-backgrounds-bc-cell-001.htm.ini +++ b/tests/wpt/metadata-css/css21_dev/html4/table-backgrounds-bc-cell-001.htm.ini @@ -1,3 +1,3 @@ [table-backgrounds-bc-cell-001.htm] type: reftest - expected: TIMEOUT + expected: FAIL diff --git a/tests/wpt/metadata-css/css21_dev/html4/table-backgrounds-bc-colgroup-001.htm.ini b/tests/wpt/metadata-css/css21_dev/html4/table-backgrounds-bc-colgroup-001.htm.ini index 022526252f7..8a7294bc385 100644 --- a/tests/wpt/metadata-css/css21_dev/html4/table-backgrounds-bc-colgroup-001.htm.ini +++ b/tests/wpt/metadata-css/css21_dev/html4/table-backgrounds-bc-colgroup-001.htm.ini @@ -1,3 +1,3 @@ [table-backgrounds-bc-colgroup-001.htm] type: reftest - expected: TIMEOUT + expected: FAIL diff --git a/tests/wpt/metadata-css/css21_dev/html4/table-backgrounds-bc-column-001.htm.ini b/tests/wpt/metadata-css/css21_dev/html4/table-backgrounds-bc-column-001.htm.ini index 8d1e3a62f2e..ce0aad5b983 100644 --- a/tests/wpt/metadata-css/css21_dev/html4/table-backgrounds-bc-column-001.htm.ini +++ b/tests/wpt/metadata-css/css21_dev/html4/table-backgrounds-bc-column-001.htm.ini @@ -1,3 +1,3 @@ [table-backgrounds-bc-column-001.htm] type: reftest - expected: TIMEOUT + expected: FAIL diff --git a/tests/wpt/metadata-css/css21_dev/html4/table-backgrounds-bc-row-001.htm.ini b/tests/wpt/metadata-css/css21_dev/html4/table-backgrounds-bc-row-001.htm.ini index bf60df81fbb..f68fcd017b7 100644 --- a/tests/wpt/metadata-css/css21_dev/html4/table-backgrounds-bc-row-001.htm.ini +++ b/tests/wpt/metadata-css/css21_dev/html4/table-backgrounds-bc-row-001.htm.ini @@ -1,3 +1,3 @@ [table-backgrounds-bc-row-001.htm] type: reftest - expected: TIMEOUT + expected: FAIL diff --git a/tests/wpt/metadata-css/css21_dev/html4/table-backgrounds-bc-rowgroup-001.htm.ini b/tests/wpt/metadata-css/css21_dev/html4/table-backgrounds-bc-rowgroup-001.htm.ini index 44031f7f572..1b9ad1f2990 100644 --- a/tests/wpt/metadata-css/css21_dev/html4/table-backgrounds-bc-rowgroup-001.htm.ini +++ b/tests/wpt/metadata-css/css21_dev/html4/table-backgrounds-bc-rowgroup-001.htm.ini @@ -1,3 +1,3 @@ [table-backgrounds-bc-rowgroup-001.htm] type: reftest - expected: TIMEOUT + expected: FAIL diff --git a/tests/wpt/metadata-css/css21_dev/html4/table-backgrounds-bc-table-001.htm.ini b/tests/wpt/metadata-css/css21_dev/html4/table-backgrounds-bc-table-001.htm.ini index d38cec6b286..7f9914be705 100644 --- a/tests/wpt/metadata-css/css21_dev/html4/table-backgrounds-bc-table-001.htm.ini +++ b/tests/wpt/metadata-css/css21_dev/html4/table-backgrounds-bc-table-001.htm.ini @@ -1,3 +1,3 @@ [table-backgrounds-bc-table-001.htm] type: reftest - expected: TIMEOUT + expected: FAIL |