Просмотр исходного кода

Merge commit from fork

security: GHSA-7fq5-7wr8-rjwj (HIGH) Shared template instances could …
James Read 1 месяц назад
Родитель
Сommit
9ea01bbd0b
1 измененных файлов с 8 добавлено и 1 удалено
  1. 8 1
      service/internal/tpl/templates.go

+ 8 - 1
service/internal/tpl/templates.go

@@ -24,6 +24,8 @@ func jsonFunc(v any) (string, error) {
 	return string(data), nil
 	return string(data), nil
 }
 }
 
 
+// Root template (funcs/options). parseTemplate clones before Parse — text/template
+// must not receive concurrent Parse calls on the same instance.
 var tpl = template.New("tpl").
 var tpl = template.New("tpl").
 	Option("missingkey=error").
 	Option("missingkey=error").
 	Funcs(template.FuncMap{"Json": jsonFunc})
 	Funcs(template.FuncMap{"Json": jsonFunc})
@@ -179,7 +181,12 @@ func checkMissingArgumentError(err error) (bool, string) {
 }
 }
 
 
 func parseTemplate(source string, data any) (string, error) {
 func parseTemplate(source string, data any) (string, error) {
-	t, err := tpl.Parse(source)
+	clone, err := tpl.Clone()
+	if err != nil {
+		return "", err
+	}
+
+	t, err := clone.Parse(source)
 
 
 	if err != nil {
 	if err != nil {
 		return "", err
 		return "", err