From 1e10f6f725189a371a923a329084f1c3f608ae38 Mon Sep 17 00:00:00 2001 From: Mohammed Al Sahaf Date: Tue, 23 Nov 2021 11:13:09 +0300 Subject: fileserver: browse: do not encode the paths in breadcrumbs and page title (#4410) --- modules/caddyhttp/fileserver/browsetplcontext.go | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'modules/caddyhttp/fileserver/browsetplcontext.go') diff --git a/modules/caddyhttp/fileserver/browsetplcontext.go b/modules/caddyhttp/fileserver/browsetplcontext.go index 2c57e52..b1b8e9e 100644 --- a/modules/caddyhttp/fileserver/browsetplcontext.go +++ b/modules/caddyhttp/fileserver/browsetplcontext.go @@ -77,9 +77,9 @@ func (fsrv *FileServer) directoryListing(files []os.FileInfo, canGoUp bool, root Mode: f.Mode(), }) } - + name, _ := url.PathUnescape(urlPath) return browseTemplateContext{ - Name: path.Base(urlPath), + Name: path.Base(name), Path: urlPath, CanGoUp: canGoUp, Items: fileInfos, @@ -133,13 +133,16 @@ func (l browseTemplateContext) Breadcrumbs() []crumb { if lpath[len(lpath)-1] == '/' { lpath = lpath[:len(lpath)-1] } - parts := strings.Split(lpath, "/") result := make([]crumb, len(parts)) for i, p := range parts { if i == 0 && p == "" { p = "/" } + // the directory name could include an encoded slash in its path, + // so the item name should be unescaped in the loop rather than unescaping the + // entire path outside the loop. + p, _ = url.PathUnescape(p) lnk := strings.Repeat("../", len(parts)-i-1) result[i] = crumb{Link: lnk, Text: p} } -- cgit v1.2.3