aboutsummaryrefslogtreecommitdiff
path: root/src/sftp.c
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:05:26 +0200
commitd1df255df46b0b59ce5abfa1b2a4b971ebb4fb64 (patch)
tree9df23bdb14974747f91ad15e7b6d3616d868e96e /src/sftp.c
parenta060a235a4168357ee309fef297176409fcda703 (diff)
downloadlibssh-d1df255df46b0b59ce5abfa1b2a4b971ebb4fb64.tar.gz
libssh-d1df255df46b0b59ce5abfa1b2a4b971ebb4fb64.tar.xz
libssh-d1df255df46b0b59ce5abfa1b2a4b971ebb4fb64.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>
Diffstat (limited to 'src/sftp.c')
-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();