Permalink
Browse files

tpl: Fix BOM issue in templates

Fixes #4895
  • Loading branch information...
bep committed Oct 30, 2018
1 parent 729593c commit 3a786a248d3eff6e732aa94e87d6e88196e5147a
Showing with 42 additions and 1 deletion.
  1. +24 −0 hugolib/template_test.go
  2. +18 −1 tpl/tplimpl/template.go
View
@@ -212,3 +212,27 @@ Some content
}
}
// https://github.com/gohugoio/hugo/issues/4895
func TestTemplateBOM(t *testing.T) {
b := newTestSitesBuilder(t).WithSimpleConfigFile()
bom := "\ufeff"
b.WithTemplatesAdded(
"_default/baseof.html", bom+`
Base: {{ block "main" . }}base main{{ end }}`,
"_default/single.html", bom+`{{ define "main" }}Hi!?{{ end }}`)
b.WithContent("page.md", `---
title: "Page"
---
Page Content
`)
b.CreateSites().Build(BuildCfg{})
b.AssertFileContent("public/page/index.html", "Base: Hi!?")
}
View
@@ -655,6 +655,22 @@ func (t *textTemplates) handleMaster(name, overlayFilename, masterFilename strin
}
func removeLeadingBOM(s string) string {
const bom = '\ufeff'
for i, r := range s {
if i == 0 && r != bom {
return s
}
if i > 0 {
return s[i:]
}
}
return s
}
func (t *templateHandler) addTemplateFile(name, baseTemplatePath, path string) error {
t.checkState()
@@ -666,7 +682,8 @@ func (t *templateHandler) addTemplateFile(name, baseTemplatePath, path string) e
if err != nil {
return templateInfo{filename: filename, fs: fs}, err
}
s := string(b)
s := removeLeadingBOM(string(b))
realFilename := filename
if fi, err := fs.Stat(filename); err == nil {

0 comments on commit 3a786a2

Please sign in to comment.