[Bug 2948] implement "copy-data" sftp extension
bugzilla-daemon at mindrot.org
bugzilla-daemon at mindrot.org
Fri Aug 28 13:43:36 AEST 2020
https://bugzilla.mindrot.org/show_bug.cgi?id=2948
--- Comment #9 from Damien Miller <djm at mindrot.org> ---
Comment on attachment 3344
--> https://bugzilla.mindrot.org/attachment.cgi?id=3344
sftp server copy-data extension
looks good - some minor comments
>diff --git a/PROTOCOL b/PROTOCOL
>index f75c1c0ae5b0..04a392db33be 100644
...
>+static void
>+process_extended_copy_data(u_int32_t id)
...
>+ /* Disallow reading & writing to the same handle */
>+ if (read_handle == write_handle || read_fd < 0 || write_fd < 0) {
I think this should also check that both the read and write handles do
not refer to the same path? (use handle_to_name())
>+ status = SSH2_FX_FAILURE;
>+ } else {
nit: prefer "goto out" over nesting if/else
>+ if (lseek(read_fd, read_off, SEEK_SET) < 0) {
>+ status = errno_to_portable(errno);
>+ error("process_extended_copy_data: read_seek failed");
nit: ditto
>+ } else if (!(handle_to_flags(write_handle) & O_APPEND) &&
>+ lseek(write_fd, write_off, SEEK_SET) < 0) {
>+ status = errno_to_portable(errno);
>+ error("process_extended_copy_data: write_seek failed");
nit: prefer __func__ to manual inclusion of function name
>+ } else {
>+ /* Process the request in chunks. */
>+ while (read_len || copy_until_eof) {
nit: prefer explicit comparison against zero (i.e "read_len > 0")
>+
>+ ret = read(read_fd, buf, len);
...
>+ ret = write(write_fd, buf, len);
I think this should use atomicio here to be signal safe.
>+ if ((size_t)ret != len) {
>+ debug2("nothing at all written");
>+ status = SSH2_FX_FAILURE;
>+ break;
>+ }
this block can go away with atomicio
--
You are receiving this mail because:
You are watching the assignee of the bug.
You are watching someone on the CC list of the bug.
More information about the openssh-bugs
mailing list