html: avoid endless loop on error token
Fixes #70179
Change-Id: I2a0a1fc2e96f7d8eefd0abdf7ef8ba243a6e8645
GitHub-Last-Rev: a601ecd8498cf5e2e9911d59a194795a21c539ef
GitHub-Pull-Request: golang/net#226
Reviewed-on: https://go-review.googlesource.com/c/net/+/624895
Reviewed-by: Ian Lance Taylor <iant@google.com>
Auto-Submit: Ian Lance Taylor <iant@google.com>
Reviewed-by: Roland Shoemaker <roland@golang.org>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
diff --git a/html/parse.go b/html/parse.go
index 46a89ed..d67705d 100644
--- a/html/parse.go
+++ b/html/parse.go
@@ -840,6 +840,10 @@
p.parseImpliedToken(StartTagToken, a.Body, a.Body.String())
p.framesetOK = true
+ if p.tok.Type == ErrorToken {
+ // Stop parsing.
+ return true
+ }
return false
}
diff --git a/html/parse_test.go b/html/parse_test.go
index aa91f4c..24b352e 100644
--- a/html/parse_test.go
+++ b/html/parse_test.go
@@ -468,6 +468,7 @@
srcs := []string{
"<math><html><template><mn><template></template></template>",
"<math><math><head><mi><template>",
+ "<svg><head><title><select><input>",
}
for _, src := range srcs {
// The next line shouldn't infinite-loop.