Skip to content

Commit

Permalink
fileserver: Fix handling of symlink sizes in directory listings (#4415)
Browse files Browse the repository at this point in the history
  • Loading branch information
jjlin authored Nov 22, 2021
1 parent eead337 commit c8b5a81
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 13 deletions.
7 changes: 1 addition & 6 deletions modules/caddyhttp/fileserver/browse.go
Original file line number Diff line number Diff line change
Expand Up @@ -141,12 +141,7 @@ 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

l, err := fsrv.directoryListing(files, canGoUp, root, urlPath, repl)
if err != nil {
return browseTemplateContext{}, err
}

return l, nil
return fsrv.directoryListing(files, canGoUp, root, urlPath, repl), nil
}

// browseApplyQueryParams applies query parameters to the listing.
Expand Down
19 changes: 12 additions & 7 deletions modules/caddyhttp/fileserver/browsetplcontext.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,11 @@ import (
"time"

"github.com/caddyserver/caddy/v2"
"github.com/caddyserver/caddy/v2/modules/caddyhttp"
"github.com/dustin/go-humanize"
)

func (fsrv *FileServer) directoryListing(files []os.FileInfo, canGoUp bool, root, urlPath string, repl *caddy.Replacer) (browseTemplateContext, error) {
func (fsrv *FileServer) directoryListing(files []os.FileInfo, canGoUp bool, root, urlPath string, repl *caddy.Replacer) browseTemplateContext {
filesToHide := fsrv.transformHidePaths(repl)

var dirCount, fileCount int
Expand All @@ -52,14 +53,18 @@ func (fsrv *FileServer) directoryListing(files []os.FileInfo, canGoUp bool, root
fileCount++
}

fileIsSymlink := isSymlink(f)
size := f.Size()
fileIsSymlink := isSymlink(f)
if fileIsSymlink {
info, err := os.Stat(name)
if err != nil {
return browseTemplateContext{}, err
path := caddyhttp.SanitizedPathJoin(root, path.Join(urlPath, f.Name()))
fileInfo, err := os.Stat(path)
if err == nil {
size = fileInfo.Size()
}
size = info.Size()
// An error most likely means the symlink target doesn't exist,
// which isn't entirely unusual and shouldn't fail the listing.
// In this case, just use the size of the symlink itself, which
// was already set above.
}

fileInfos = append(fileInfos, fileInfo{
Expand All @@ -80,7 +85,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.
Expand Down

0 comments on commit c8b5a81

Please sign in to comment.