sftp: improve handling of too short files
This commit is contained in:
parent
7ed560a201
commit
c6d74458ee
1 changed files with 18 additions and 0 deletions
|
@ -43,6 +43,8 @@ type SFTP struct {
|
|||
|
||||
var _ backend.Backend = &SFTP{}
|
||||
|
||||
var errTooShort = fmt.Errorf("file is too short")
|
||||
|
||||
func NewFactory() location.Factory {
|
||||
return location.NewLimitedBackendFactory("sftp", ParseConfig, location.NoPassword, limiter.WrapBackendConstructor(Create), limiter.WrapBackendConstructor(Open))
|
||||
}
|
||||
|
@ -212,6 +214,10 @@ func (r *SFTP) IsNotExist(err error) bool {
|
|||
return errors.Is(err, os.ErrNotExist)
|
||||
}
|
||||
|
||||
func (r *SFTP) IsPermanentError(err error) bool {
|
||||
return r.IsNotExist(err) || errors.Is(err, errTooShort) || errors.Is(err, os.ErrPermission)
|
||||
}
|
||||
|
||||
func buildSSHCommand(cfg Config) (cmd string, args []string, err error) {
|
||||
if cfg.Command != "" {
|
||||
args, err := backend.SplitShellStrings(cfg.Command)
|
||||
|
@ -428,6 +434,18 @@ func (r *SFTP) openReader(_ context.Context, h backend.Handle, length int, offse
|
|||
return nil, err
|
||||
}
|
||||
|
||||
fi, err := f.Stat()
|
||||
if err != nil {
|
||||
_ = f.Close()
|
||||
return nil, err
|
||||
}
|
||||
|
||||
size := fi.Size()
|
||||
if size < offset+int64(length) {
|
||||
_ = f.Close()
|
||||
return nil, errTooShort
|
||||
}
|
||||
|
||||
if offset > 0 {
|
||||
_, err = f.Seek(offset, 0)
|
||||
if err != nil {
|
||||
|
|
Loading…
Reference in a new issue