On Tue, 22 Feb 2022, Dmitry Belyavskiy wrote:
> Hello,
>
> We came across a weird bug using SCP in SFTP mode
> Current master, command
>
> ./scp -s -S `which ssh` qq localhost:`pwd`/qq
>
> effectively truncates the file to be copied.
>
> SCP mode deals normally.
>
> I understand that it's a corner case but still think it's worth
reporting.
Yes, this is because scp/rcp does open(path, O_CREAT) and then ftruncate()
at close() time, whereas scp/sftp does open(path, O_CREAT|O_TRUNC) on the
basis that in an aborted transfer it's better to leave truncated files
around than files with inconsistent contents.
I don't want to change the behaviour of sftp's upload code, because I
think
it is better (at the very least, it allows resumption of transfers without
needing rsync-like tricks), so IMO the best way to avoid this would be to
teach the upload code to go via a temporary file. Not sure whether this is
worth the hassle though for such a corner-case.
-d