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 <namusyaka@gmail.com> Reviewed-by: Nigel Tao <nigeltao@golang.org> Run-TryBot: Kunpei Sakai <namusyaka@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
diff --git a/html/parse.go b/html/parse.go index 2aaf2ff..e0bfc1f 100644 --- a/html/parse.go +++ b/html/parse.go
@@ -1744,8 +1744,9 @@ 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 0000000..741f4b1 --- /dev/null +++ b/html/testdata/go/issue_30600_parse_panics_in_cell_mode.dat
@@ -0,0 +1,12 @@ +#data +<table><math><th><mo><select></table> +#errors +#document +| <html> +| <head> +| <body> +| <math math> +| <math th> +| <math mo> +| <select> +| <table>
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 0000000..e314964 --- /dev/null +++ b/html/testdata/go/issue_30961_error_nested_unknown_tag_types.dat
@@ -0,0 +1,11 @@ +#data +<html><head></head><body><tag1><tag2 /><p></p></tag1><div></div></body></html> +#errors +#document +| <html> +| <head> +| <body> +| <tag1> +| <tag2> +| <p> +| <div>
diff --git a/html/testdata/go/template.dat b/html/testdata/go/template.dat index 4619337..ceaf022 100644 --- a/html/testdata/go/template.dat +++ b/html/testdata/go/template.dat
@@ -60,15 +60,3 @@ | <math template> | <math mn> | <b> - -#data -<html><head></head><body><tag1><tag2 /><p></p></tag1><div></div></body></html> -#errors -#document -| <html> -| <head> -| <body> -| <tag1> -| <tag2> -| <p> -| <div>