shithub: hugo

Download patch

ref: 3a786a248d3eff6e732aa94e87d6e88196e5147a
parent: 729593c842794eaf7127050953a5c2256d332051
author: Bjørn Erik Pedersen <[email protected]>
date: Tue Oct 30 13:36:05 EDT 2018

tpl: Fix BOM issue in templates

Fixes #4895

--- a/hugolib/template_test.go
+++ b/hugolib/template_test.go
@@ -212,3 +212,27 @@
 
 	}
 }
+
+// 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!?")
+
+}
--- a/tpl/tplimpl/template.go
+++ b/tpl/tplimpl/template.go
@@ -655,6 +655,22 @@
 
 }
 
+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 @@
 		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 {