in internal/serving/disk/reader.go [181:218]
func (reader *Reader) resolvePath(ctx context.Context, root vfs.Root, subPath ...string) (string, error) {
// Don't use filepath.Join as cleans the path,
// where we want to traverse full path as supplied by user
// (including ..)
testPath := strings.Join(subPath, "/")
fullPath, err := symlink.EvalSymlinks(ctx, root, testPath)
if err != nil {
if endsWithoutHTMLExtension(testPath) {
return "", &locationFileNoExtensionError{
FullPath: fullPath,
}
}
return "", err
}
fi, err := root.Lstat(ctx, fullPath)
if err != nil {
return "", err
}
// The requested path is a directory, so try index.html via recursion
if fi.IsDir() {
return "", &locationDirectoryError{
FullPath: fullPath,
RelativePath: testPath,
}
}
// The file exists, but is not a supported type to serve. Perhaps a block
// special device or something else that may be a security risk.
if !fi.Mode().IsRegular() {
return "", fmt.Errorf("%s: is not a regular file", fullPath)
}
return fullPath, nil
}