From d3a025994466c3d055fc3fc62bbb048c76f3e1c2 Mon Sep 17 00:00:00 2001 From: HayatoShiba <55432631+HayatoShiba@users.noreply.github.com> Date: Sat, 18 Sep 2021 20:51:59 +0900 Subject: [PATCH] fileserver: Fix displayed file size if it is symlink (#4354) * Fix file size if it is symlink * change the variable name for readability --- modules/caddyhttp/fileserver/browse.go | 7 ++++++- .../caddyhttp/fileserver/browsetplcontext.go | 20 ++++++++++++++----- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/modules/caddyhttp/fileserver/browse.go b/modules/caddyhttp/fileserver/browse.go index cd9bcbcd..92a1e6ec 100644 --- a/modules/caddyhttp/fileserver/browse.go +++ b/modules/caddyhttp/fileserver/browse.go @@ -137,7 +137,12 @@ func (fsrv *FileServer) loadDirectoryContents(dir *os.File, root, urlPath string // user can presumably browse "up" to parent folder if path is longer than "/" canGoUp := len(urlPath) > 1 - return fsrv.directoryListing(files, canGoUp, root, urlPath, repl), nil + l, err := fsrv.directoryListing(files, canGoUp, root, urlPath, repl) + if err != nil { + return browseTemplateContext{}, err + } + + return l, nil } // browseApplyQueryParams applies query parameters to the listing. diff --git a/modules/caddyhttp/fileserver/browsetplcontext.go b/modules/caddyhttp/fileserver/browsetplcontext.go index 6aa75013..7dc4f080 100644 --- a/modules/caddyhttp/fileserver/browsetplcontext.go +++ b/modules/caddyhttp/fileserver/browsetplcontext.go @@ -27,7 +27,7 @@ import ( "github.com/dustin/go-humanize" ) -func (fsrv *FileServer) directoryListing(files []os.FileInfo, canGoUp bool, root, urlPath string, repl *caddy.Replacer) browseTemplateContext { +func (fsrv *FileServer) directoryListing(files []os.FileInfo, canGoUp bool, root, urlPath string, repl *caddy.Replacer) (browseTemplateContext, error) { filesToHide := fsrv.transformHidePaths(repl) var dirCount, fileCount int @@ -52,11 +52,21 @@ func (fsrv *FileServer) directoryListing(files []os.FileInfo, canGoUp bool, root fileCount++ } + fileIsSymlink := isSymlink(f) + size := f.Size() + if fileIsSymlink { + info, err := os.Stat(name) + if err != nil { + return browseTemplateContext{}, err + } + size = info.Size() + } + fileInfos = append(fileInfos, fileInfo{ IsDir: isDir, - IsSymlink: isSymlink(f), - Name: f.Name(), - Size: f.Size(), + IsSymlink: fileIsSymlink, + Name: name, + Size: size, URL: u.String(), ModTime: f.ModTime().UTC(), Mode: f.Mode(), @@ -70,7 +80,7 @@ func (fsrv *FileServer) directoryListing(files []os.FileInfo, canGoUp bool, root Items: fileInfos, NumDirs: dirCount, NumFiles: fileCount, - } + }, nil } // browseTemplateContext provides the template context for directory listings.