From ce75fb3bc6623b2dec170f34ed5bf8346588c1d8 Mon Sep 17 00:00:00 2001 From: Tom Anthony Date: Thu, 18 Apr 2019 18:18:05 +0000 Subject: [PATCH] html: Add missing condition to 'in cell' insertion mode, required by spec In section 12.2.6.4.15 of the spec, there is a condition that the current node is a td or th element, which is not implemented. This can lead to a panic when the open elements stack is popped whilst empty, as outlined in golang/go#30600. This commit implements that check. Fixes golang/go#30600 Change-Id: I4837815e2edce21b58a985a100d93d146bf71e24 GitHub-Last-Rev: 79084c5a8481cd2cf8e4df632ffa358c1e41335b GitHub-Pull-Request: golang/net#41 Reviewed-on: https://go-review.googlesource.com/c/net/+/172377 Reviewed-by: Kunpei Sakai Reviewed-by: Nigel Tao Run-TryBot: Kunpei Sakai TryBot-Result: Gobot Gobot --- html/parse.go | 5 +++-- .../go/issue_30600_parse_panics_in_cell_mode.dat | 12 ++++++++++++ .../issue_30961_error_nested_unknown_tag_types.dat | 11 +++++++++++ html/testdata/go/template.dat | 12 ------------ 4 files changed, 26 insertions(+), 14 deletions(-) create mode 100644 html/testdata/go/issue_30600_parse_panics_in_cell_mode.dat create mode 100644 html/testdata/go/issue_30961_error_nested_unknown_tag_types.dat diff --git a/html/parse.go b/html/parse.go index 2aaf2ff0..e0bfc1f3 100644 --- a/html/parse.go +++ b/html/parse.go @@ -1744,8 +1744,9 @@ func inCellIM(p *parser) bool { return true } // Close the cell and reprocess. - p.popUntil(tableScope, a.Td, a.Th) - p.clearActiveFormattingElements() + if p.popUntil(tableScope, a.Td, a.Th) { + p.clearActiveFormattingElements() + } p.im = inRowIM return false } diff --git a/html/testdata/go/issue_30600_parse_panics_in_cell_mode.dat b/html/testdata/go/issue_30600_parse_panics_in_cell_mode.dat new file mode 100644 index 00000000..741f4b1a --- /dev/null +++ b/html/testdata/go/issue_30600_parse_panics_in_cell_mode.dat @@ -0,0 +1,12 @@ +#data +
+#errors +#document +| +| +| +| +| +| +| diff --git a/html/testdata/go/issue_30961_error_nested_unknown_tag_types.dat b/html/testdata/go/issue_30961_error_nested_unknown_tag_types.dat new file mode 100644 index 00000000..e3149644 --- /dev/null +++ b/html/testdata/go/issue_30961_error_nested_unknown_tag_types.dat @@ -0,0 +1,11 @@ +#data +

+#errors +#document +| +| +| +| +| +|

+|

diff --git a/html/testdata/go/template.dat b/html/testdata/go/template.dat index 46193372..ceaf0229 100644 --- a/html/testdata/go/template.dat +++ b/html/testdata/go/template.dat @@ -60,15 +60,3 @@ | | | - -#data -

-#errors -#document -| -| -| -| -| -|

-|