scp: check for write errors
exits as soon as there is a write error instead of get the same error when the transfer is closed
This commit is contained in:
parent
ae8ed75ae5
commit
62b20cd884
2 changed files with 18 additions and 2 deletions
|
@ -1534,7 +1534,18 @@ func TestSCPUploadFiledata(t *testing.T) {
|
|||
addTransfer(&transfer)
|
||||
err = scpCommand.getUploadFileData(0, &transfer)
|
||||
if err != errTransferClosed {
|
||||
t.Errorf("upload must fail, the transfer is already closed")
|
||||
t.Errorf("upload must fail, the transfer is already closed, err: %v", err)
|
||||
}
|
||||
mockSSHChannel = MockChannel{
|
||||
Buffer: bytes.NewBuffer(buf),
|
||||
StdErrBuffer: bytes.NewBuffer(stdErrBuf),
|
||||
ReadError: nil,
|
||||
WriteError: nil,
|
||||
}
|
||||
addTransfer(&transfer)
|
||||
err = scpCommand.getUploadFileData(2, &transfer)
|
||||
if !errors.Is(err, os.ErrClosed) {
|
||||
t.Errorf("the file is closed and writes must fail, err: %v", err)
|
||||
}
|
||||
err = os.Remove(testfile)
|
||||
if err != nil {
|
||||
|
|
|
@ -158,7 +158,12 @@ func (c *scpCommand) getUploadFileData(sizeToRead int64, transfer *Transfer) err
|
|||
transfer.Close()
|
||||
return err
|
||||
}
|
||||
transfer.WriteAt(buf[:n], sizeToRead-remaining)
|
||||
_, err = transfer.WriteAt(buf[:n], sizeToRead-remaining)
|
||||
if err != nil {
|
||||
c.sendErrorMessage(err.Error())
|
||||
transfer.Close()
|
||||
return err
|
||||
}
|
||||
remaining -= int64(n)
|
||||
if remaining <= 0 {
|
||||
break
|
||||
|
|
Loading…
Add table
Reference in a new issue