From c4fa2f07996c7f1f4e257089a3c3c5b4c1339722 Mon Sep 17 00:00:00 2001 From: Sam Smith Date: Sat, 7 Mar 2020 18:56:02 +0000 Subject: [PATCH] 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 --- tpl/data/data_test.go | 5 +++++ tpl/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 index 8bd4edc9..fa99006b 100644 --- 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 index 7de440ca..923d5946 100644 --- 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 } -- 2.30.2