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