package safepath // ErrNotAccessible is returned by Join when the resulting path doesn't exist, // is not accessible, or any of the path components was replaced with a symlink // during the path traversal. type ErrNotAccessible struct { Path string Cause error } func (*ErrNotAccessible) NotFound() {} func (e *ErrNotAccessible) Unwrap() error { return e.Cause } func (e *ErrNotAccessible) Error() string { msg := "cannot access path " + e.Path if e.Cause != nil { msg += ": " + e.Cause.Error() } return msg } // ErrEscapesBase is returned by Join when the resulting concatenation would // point outside of the specified base directory. type ErrEscapesBase struct { Base, Subpath string } func (*ErrEscapesBase) InvalidParameter() {} func (e *ErrEscapesBase) Error() string { msg := "path concatenation escapes the base directory" if e.Base != "" { msg += ", base: " + e.Base } if e.Subpath != "" { msg += ", subpath: " + e.Subpath } return msg }