html: don't set im if <template> doesn't have HTML namespace If there are nested <template> elements and the <template> node isn't in HTML namespace, couldn't continue to parse documents correctly. By this patch, it makes the <template> which is in math namespace be skipped on resetting insertion mode. Fixes golang/go#27702 Change-Id: I6eacdb98fe29eb3c61781afca5bc4d83e72ba4ed Reviewed-on: https://go-review.googlesource.com/136875 Reviewed-by: Nigel Tao <nigeltao@golang.org>
diff --git a/html/parse.go b/html/parse.go index 63ac179..9889c09 100644 --- a/html/parse.go +++ b/html/parse.go
@@ -470,6 +470,10 @@ case a.Table: p.im = inTableIM case a.Template: + // TODO: remove this divergence from the HTML5 spec. + if n.Namespace != "" { + continue + } p.im = p.templateStack.top() case a.Head: // TODO: remove this divergence from the HTML5 spec.
diff --git a/html/testdata/go/template.dat b/html/testdata/go/template.dat index b6f2a8d..98481b9 100644 --- a/html/testdata/go/template.dat +++ b/html/testdata/go/template.dat
@@ -22,3 +22,16 @@ | content | <tbody> | <body> + +#data +<math><template><mo><template> +#errors +#document +| <html> +| <head> +| <body> +| <math math> +| <math template> +| <math mo> +| <template> +| content