aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonas Jonsson <jonas@websystem.se>2011-08-28 23:00:06 +0200
committerAndreas Schneider <asn@cryptomilk.org>2011-08-29 10:07:22 +0200
commit661722753b83d0d8eff08a1572a3468b6d30183e (patch)
tree9bc962b06e9351e280decadb6cacca819a19c9d8
parentac445a1e189f2bb5730dec6f6b7205a53defd224 (diff)
downloadlibssh-661722753b83d0d8eff08a1572a3468b6d30183e.tar.gz
libssh-661722753b83d0d8eff08a1572a3468b6d30183e.tar.xz
libssh-661722753b83d0d8eff08a1572a3468b6d30183e.zip
sftp: Handle short reads of sftp_async_read().
sftp_async_read() and sftp_async_read_begin() assume that the whole read will be successful but when this is not the case, the offset will be wrong. Signed-off-by: Andreas Schneider <asn@cryptomilk.org> (cherry picked from commit d1df255df46b0b59ce5abfa1b2a4b971ebb4fb64)
-rw-r--r--src/sftp.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/src/sftp.c b/src/sftp.c
index 99798e78..4c249e30 100644
--- a/src/sftp.c
+++ b/src/sftp.c
@@ -1945,9 +1945,8 @@ int sftp_async_read(sftp_file file, void *data, uint32_t size, uint32_t id){
return SSH_ERROR;
}
len = ssh_string_len(datastring);
- //handle->offset+=len;
- /* We already have set the offset previously. All we can do is warn that the expected len
- * and effective lengths are different */
+ /* Update the offset with the correct value */
+ file->offset = file->offset - (size - len);
memcpy(data, ssh_string_data(datastring), len);
ssh_string_free(datastring);
sftp_leave_function();