html: avoid panic even if unconsidered <isindex> and <template> combination
The <isindex> element has been removed from the spec so that the
<template> element doesn't cover it.
To avoid panic, this commit adds ignoring code as a workaround.
Fixes golang/go#27704
Change-Id: I847391389285df2fc0eb6a795f8c93b481cdebac
Reviewed-on: https://go-review.googlesource.com/136575
Reviewed-by: Nigel Tao <nigeltao@golang.org>
diff --git a/html/parse.go b/html/parse.go
index 091fb0d..63ac179 100644
--- a/html/parse.go
+++ b/html/parse.go
@@ -984,6 +984,14 @@
p.acknowledgeSelfClosingTag()
p.popUntil(buttonScope, a.P)
p.parseImpliedToken(StartTagToken, a.Form, a.Form.String())
+ if p.form == nil {
+ // NOTE: The 'isindex' element has been removed,
+ // and the 'template' element has not been designed to be
+ // collaborative with the index element.
+ //
+ // Ignore the token.
+ return true
+ }
if action != "" {
p.form.Attr = []Attribute{{Key: "action", Val: action}}
}
diff --git a/html/testdata/go/template.dat b/html/testdata/go/template.dat
index a0a525b..b6f2a8d 100644
--- a/html/testdata/go/template.dat
+++ b/html/testdata/go/template.dat
@@ -11,3 +11,14 @@
| <form>
| <paper-input>
| <style>
+
+#data
+<template><tBody><isindex/action=0>
+#errors
+#document
+| <html>
+| <head>
+| <template>
+| content
+| <tbody>
+| <body>