aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbors-servo <metajack+bors@gmail.com>2015-08-18 05:15:12 -0600
committerbors-servo <metajack+bors@gmail.com>2015-08-18 05:15:12 -0600
commit3d0951cf256ec07b427eaa2305b85da7a7645359 (patch)
tree8dd1f1ffd4d844e62ca26b0be8ef21857e63ec48
parent5b3d3514c1b6fa010a4a5905e01cd2913538a07e (diff)
parentd885958621b728ddb7b9f2296a87c55bf8d61951 (diff)
downloadservo-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 -->
-rw-r--r--components/layout/table.rs48
-rw-r--r--tests/wpt/metadata-css/css21_dev/html4/border-collapse-dynamic-colgroup-001.htm.ini3
-rw-r--r--tests/wpt/metadata-css/css21_dev/html4/border-collapse-dynamic-colgroup-002.htm.ini3
-rw-r--r--tests/wpt/metadata-css/css21_dev/html4/border-collapse-dynamic-colgroup-003.htm.ini3
-rw-r--r--tests/wpt/metadata-css/css21_dev/html4/border-collapse-dynamic-column-001.htm.ini3
-rw-r--r--tests/wpt/metadata-css/css21_dev/html4/border-collapse-dynamic-column-002.htm.ini3
-rw-r--r--tests/wpt/metadata-css/css21_dev/html4/border-collapse-dynamic-column-003.htm.ini3
-rw-r--r--tests/wpt/metadata-css/css21_dev/html4/border-collapse-dynamic-table-001.htm.ini3
-rw-r--r--tests/wpt/metadata-css/css21_dev/html4/border-collapse-dynamic-table-002.htm.ini3
-rw-r--r--tests/wpt/metadata-css/css21_dev/html4/border-collapse-dynamic-table-003.htm.ini3
-rw-r--r--tests/wpt/metadata-css/css21_dev/html4/table-backgrounds-bc-cell-001.htm.ini2
-rw-r--r--tests/wpt/metadata-css/css21_dev/html4/table-backgrounds-bc-colgroup-001.htm.ini2
-rw-r--r--tests/wpt/metadata-css/css21_dev/html4/table-backgrounds-bc-column-001.htm.ini2
-rw-r--r--tests/wpt/metadata-css/css21_dev/html4/table-backgrounds-bc-row-001.htm.ini2
-rw-r--r--tests/wpt/metadata-css/css21_dev/html4/table-backgrounds-bc-rowgroup-001.htm.ini2
-rw-r--r--tests/wpt/metadata-css/css21_dev/html4/table-backgrounds-bc-table-001.htm.ini2
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