hugo

Unnamed repository; edit this file 'description' to name the repository.

git clone git://git.shimmy1996.com/hugo.git
commit c4fa2f07996c7f1f4e257089a3c3c5b4c1339722
parent 108314444b510bfc330ccac745dce7beccd52c91
Author: Sam Smith <sams96@mail.com>
Date:   Sat,  7 Mar 2020 18:56:02 +0000

tpl: Fix error with unicode in file paths

Add url.QueryUnescape before reading file which allows files with
unicode in their paths to be read.

Fixes #6996

Diffstat:
Mtpl/data/data_test.go | 5+++++
Mtpl/data/resources.go | 7++++++-
2 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/tpl/data/data_test.go b/tpl/data/data_test.go
@@ -157,6 +157,11 @@ func TestGetJSON(t *testing.T) {
 			"",
 			false,
 		},
+		{
+			`pass/üńīçøðê-url.json`,
+			`{"gomeetup":["Sydney","San Francisco","Stockholm"]}`,
+			map[string]interface{}{"gomeetup": []interface{}{"Sydney", "San Francisco", "Stockholm"}},
+		},
 	} {
 
 		msg := qt.Commentf("Test %d", i)
diff --git a/tpl/data/resources.go b/tpl/data/resources.go
@@ -16,6 +16,7 @@ package data
 import (
 	"io/ioutil"
 	"net/http"
+	"net/url"
 	"path/filepath"
 	"time"
 
@@ -107,7 +108,11 @@ func getLocal(url string, fs afero.Fs, cfg config.Provider) ([]byte, error) {
 func (ns *Namespace) getResource(cache *filecache.Cache, unmarshal func(b []byte) (bool, error), req *http.Request) error {
 	switch req.URL.Scheme {
 	case "":
-		b, err := getLocal(req.URL.String(), ns.deps.Fs.Source, ns.deps.Cfg)
+		url, err := url.QueryUnescape(req.URL.String())
+		if err != nil {
+			return err
+		}
+		b, err := getLocal(url, ns.deps.Fs.Source, ns.deps.Cfg)
 		if err != nil {
 			return err
 		}