html: make (*nodeStack)contains distinguish namespace
By proceeding without distinguishing namespace, inconsistency will
occur.
This commit makes the method distinguish the HTML namespace.
Fixes golang/go#27846
Change-Id: I8269f670240c0fe31162a16fbe1ac23acacec00f
Reviewed-on: https://go-review.googlesource.com/c/159397
Run-TryBot: Kunpei Sakai <namusyaka@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Nigel Tao <nigeltao@golang.org>
diff --git a/html/node.go b/html/node.go
index 2c1cade..633ee15 100644
--- a/html/node.go
+++ b/html/node.go
@@ -177,7 +177,7 @@
// contains returns whether a is within s.
func (s *nodeStack) contains(a atom.Atom) bool {
for _, n := range *s {
- if n.DataAtom == a {
+ if n.DataAtom == a && n.Namespace == "" {
return true
}
}
diff --git a/html/testdata/go/template.dat b/html/testdata/go/template.dat
index 98481b9..ceaf022 100644
--- a/html/testdata/go/template.dat
+++ b/html/testdata/go/template.dat
@@ -35,3 +35,28 @@
| <math mo>
| <template>
| content
+
+#data
+<svg><template><desc><t><svg></template>
+#errors
+#document
+| <html>
+| <head>
+| <body>
+| <svg svg>
+| <svg template>
+| <svg desc>
+| <t>
+| <svg svg>
+
+#data
+<math><template><mn><b></template>
+#errors
+#document
+| <html>
+| <head>
+| <body>
+| <math math>
+| <math template>
+| <math mn>
+| <b>