diff --git a/basepath.go b/basepath.go index 2e72793a..251c1a04 100644 --- a/basepath.go +++ b/basepath.go @@ -51,11 +51,14 @@ func NewBasePathFs(source Fs, path string) Fs { // on a file outside the base path it returns the given file name and an error, // else the given file with the base path prepended func (b *BasePathFs) RealPath(name string) (path string, err error) { - if err := validateBasePathName(name); err != nil { + if err := validateBasePathName(name, b.path); err != nil { return name, err } - bpath := filepath.Clean(b.path) + bpath := b.path + if bpath != "" { + bpath = filepath.Clean(b.path) + } path = filepath.Clean(filepath.Join(bpath, name)) if !strings.HasPrefix(path, bpath) { return name, os.ErrNotExist @@ -64,7 +67,7 @@ func (b *BasePathFs) RealPath(name string) (path string, err error) { return path, nil } -func validateBasePathName(name string) error { +func validateBasePathName(name string, base string) error { if runtime.GOOS != "windows" { // Not much to do here; // the virtual file paths all look absolute on *nix. @@ -73,7 +76,7 @@ func validateBasePathName(name string) error { // On Windows a common mistake would be to provide an absolute OS path // We could strip out the base part, but that would not be very portable. - if filepath.IsAbs(name) { + if filepath.IsAbs(name) && base != "" { return os.ErrNotExist }