diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2017-09-13 12:32:06 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-09-13 12:32:06 +0200 |
commit | 2d613dd905bb8eeb8af57e30ddd749a0f04fbd3c (patch) | |
tree | c25503456ff575ccd88087afc285bb202cd390c8 /tpl | |
parent | 642ba6cab24c558b16378178fe829cbc45845424 (diff) |
tpl/tplimpl: Fix escaped HTML Go 1.9 multioutput issue (#3880)
Fixes #3876
Diffstat (limited to 'tpl')
-rw-r--r-- | tpl/tplimpl/template.go | 6 | ||||
-rw-r--r-- | tpl/tplimpl/template_test.go | 64 |
2 files changed, 68 insertions, 2 deletions
diff --git a/tpl/tplimpl/template.go b/tpl/tplimpl/template.go index 06ab775c3..a8417819e 100644 --- a/tpl/tplimpl/template.go +++ b/tpl/tplimpl/template.go @@ -305,7 +305,8 @@ func (t *htmlTemplates) addTemplateIn(tt *template.Template, name, tpl string) e // We need to keep track of one ot the output format's shortcode template // without knowing the rendering context. withoutExt := strings.TrimSuffix(name, path.Ext(name)) - tt.AddParseTree(withoutExt, templ.Tree) + clone := template.Must(templ.Clone()) + tt.AddParseTree(withoutExt, clone.Tree) } return nil @@ -334,7 +335,8 @@ func (t *textTemplates) addTemplateIn(tt *texttemplate.Template, name, tpl strin // We need to keep track of one ot the output format's shortcode template // without knowing the rendering context. withoutExt := strings.TrimSuffix(name, path.Ext(name)) - tt.AddParseTree(withoutExt, templ.Tree) + clone := texttemplate.Must(templ.Clone()) + tt.AddParseTree(withoutExt, clone.Tree) } return nil diff --git a/tpl/tplimpl/template_test.go b/tpl/tplimpl/template_test.go new file mode 100644 index 000000000..b94848394 --- /dev/null +++ b/tpl/tplimpl/template_test.go @@ -0,0 +1,64 @@ +// Copyright 2017-present The Hugo Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package tplimpl + +import ( + "testing" + + "github.com/gohugoio/hugo/deps" + "github.com/gohugoio/hugo/hugofs" + "github.com/spf13/viper" + "github.com/stretchr/testify/require" +) + +type handler interface { + addTemplate(name, tpl string) error +} + +// #3876 +func TestHTMLEscape(t *testing.T) { + assert := require.New(t) + + data := map[string]string{ + "html": "<h1>Hi!</h1>", + "other": "<h1>Hi!</h1>", + } + v := viper.New() + fs := hugofs.NewMem(v) + + //afero.WriteFile(fs.Source, filepath.Join(workingDir, "README.txt"), []byte("Hugo Rocks!"), 0755) + + depsCfg := newDepsConfig(v) + depsCfg.Fs = fs + d, err := deps.New(depsCfg) + assert.NoError(err) + + tpl := `{{ "<h1>Hi!</h1>" | safeHTML }}` + + provider := DefaultTemplateProvider + provider.Update(d) + + h := d.Tmpl.(handler) + + assert.NoError(h.addTemplate("shortcodes/myShort.html", tpl)) + + s, err := d.Tmpl.Lookup("shortcodes/myShort.html").ExecuteToString(data) + assert.NoError(err) + assert.Contains(s, "<h1>Hi!</h1>") + + s, err = d.Tmpl.Lookup("shortcodes/myShort").ExecuteToString(data) + assert.NoError(err) + assert.Contains(s, "<h1>Hi!</h1>") + +} |