From: Roland Shoemaker Date: Mon, 9 Dec 2024 19:53:32 +0000 (-0800) Subject: html/template: escape script tags in JS errors case insensitively X-Git-Tag: go1.24rc1~3^2~11 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=e6de1b2debe2bc7211f6f9cac4b64d7cd90f7c4e;p=gostls13.git html/template: escape script tags in JS errors case insensitively Thanks to Juho Forsén of Mattermost for reporting this issue. Fixes #70740 Change-Id: I1a49b199dee91cd2bb4df5b174aaa958dc040c18 Reviewed-on: https://go-review.googlesource.com/c/go/+/634696 LUCI-TryBot-Result: Go LUCI Reviewed-by: Damien Neil --- diff --git a/src/html/template/js.go b/src/html/template/js.go index d1463dee14..b3bf94801b 100644 --- a/src/html/template/js.go +++ b/src/html/template/js.go @@ -9,6 +9,7 @@ import ( "encoding/json" "fmt" "reflect" + "regexp" "strings" "unicode/utf8" ) @@ -144,6 +145,8 @@ func indirectToJSONMarshaler(a any) any { return v.Interface() } +var scriptTagRe = regexp.MustCompile("(?i)<(/?)script") + // jsValEscaper escapes its inputs to a JS Expression (section 11.14) that has // neither side-effects nor free variables outside (NaN, Infinity). func jsValEscaper(args ...any) string { @@ -181,9 +184,9 @@ func jsValEscaper(args ...any) string { // In particular we: // * replace "*/" comment end tokens with "* /", which does not // terminate the comment - // * replace "