mirror of
https://github.com/gohugoio/hugo.git
synced 2025-08-21 21:35:28 +02:00
Fix upstream Go templates bug with reversed key/value assignment
The template packages are based on go1.20.5 with the patch in befec5ddbbfbd81ec84e74e15a38044d67f8785b added. This also includes a security fix that now disallows Go template actions in JS literals (inside backticks). This will throw an error saying "... appears in a JS template literal". If you're really sure this isn't a security risk in your case, you can revert to the old behaviour: ```toml [security] [security.gotemplates] allowActionJSTmpl = true ``` See https://github.com/golang/go/issues/59234 Fixes #11112
This commit is contained in:
@@ -2,6 +2,7 @@ package tplimpl_test
|
||||
|
||||
import (
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
qt "github.com/frankban/quicktest"
|
||||
@@ -160,3 +161,70 @@ title: "S3P1"
|
||||
b.AssertFileContent("public/s2/p1/index.html", `S2P1`)
|
||||
b.AssertFileContent("public/s3/p1/index.html", `S3P1`)
|
||||
}
|
||||
|
||||
func TestGoTemplateBugs(t *testing.T) {
|
||||
|
||||
t.Run("Issue 11112", func(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
files := `
|
||||
-- config.toml --
|
||||
-- layouts/index.html --
|
||||
{{ $m := dict "key" "value" }}
|
||||
{{ $k := "" }}
|
||||
{{ $v := "" }}
|
||||
{{ range $k, $v = $m }}
|
||||
{{ $k }} = {{ $v }}
|
||||
{{ end }}
|
||||
`
|
||||
|
||||
b := hugolib.NewIntegrationTestBuilder(
|
||||
hugolib.IntegrationTestConfig{
|
||||
T: t,
|
||||
TxtarString: files,
|
||||
},
|
||||
)
|
||||
b.Build()
|
||||
|
||||
b.AssertFileContent("public/index.html", `key = value`)
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
func TestSecurityAllowActionJSTmpl(t *testing.T) {
|
||||
|
||||
filesTemplate := `
|
||||
-- config.toml --
|
||||
SECURITYCONFIG
|
||||
-- layouts/index.html --
|
||||
<script>
|
||||
var a = §§{{.Title }}§§;
|
||||
</script>
|
||||
`
|
||||
|
||||
files := strings.ReplaceAll(filesTemplate, "SECURITYCONFIG", "")
|
||||
|
||||
b, err := hugolib.NewIntegrationTestBuilder(
|
||||
hugolib.IntegrationTestConfig{
|
||||
T: t,
|
||||
TxtarString: files,
|
||||
},
|
||||
).BuildE()
|
||||
|
||||
b.Assert(err, qt.Not(qt.IsNil))
|
||||
b.Assert(err.Error(), qt.Contains, "{{.Title}} appears in a JS template literal")
|
||||
|
||||
files = strings.ReplaceAll(filesTemplate, "SECURITYCONFIG", `
|
||||
[security]
|
||||
[security.gotemplates]
|
||||
allowActionJSTmpl = true
|
||||
`)
|
||||
|
||||
b = hugolib.NewIntegrationTestBuilder(
|
||||
hugolib.IntegrationTestConfig{
|
||||
T: t,
|
||||
TxtarString: files,
|
||||
},
|
||||
).Build()
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user