aboutsummaryrefslogtreecommitdiff
path: root/src/sftp.c
diff options
context:
space:
mode:
authorAndreas Schneider <asn@cryptomilk.org>2018-09-08 08:53:45 +0200
committerAndreas Schneider <asn@cryptomilk.org>2018-09-17 10:48:49 +0200
commit01135703a3c1fdbc103db3a8586659b07e652dff (patch)
treea64d40d6c82b1e49dec82aac25b21992ada0d729 /src/sftp.c
parentc070414309a784681d112e6b00f11cc3abdda063 (diff)
downloadlibssh-01135703a3c1fdbc103db3a8586659b07e652dff.tar.gz
libssh-01135703a3c1fdbc103db3a8586659b07e652dff.tar.xz
libssh-01135703a3c1fdbc103db3a8586659b07e652dff.zip
sftp: Use 's' only in the scope it is needed
This revaled a bug when reading the packet type. Signed-off-by: Andreas Schneider <asn@cryptomilk.org>
Diffstat (limited to 'src/sftp.c')
-rw-r--r--src/sftp.c36
1 files changed, 19 insertions, 17 deletions
diff --git a/src/sftp.c b/src/sftp.c
index 0bb82db7..d45d11e0 100644
--- a/src/sftp.c
+++ b/src/sftp.c
@@ -332,7 +332,7 @@ sftp_packet sftp_packet_read(sftp_session sftp)
uint8_t buffer[SFTP_BUFFER_SIZE_MAX];
sftp_packet packet = sftp->read_packet;
uint32_t size;
- int r, s, is_eof;
+ int nread, is_eof;
int rc;
packet->sftp = sftp;
@@ -343,10 +343,12 @@ sftp_packet sftp_packet_read(sftp_session sftp)
return NULL;
}
- r = 0;
+ nread = 0;
do {
+ int s;
+
// read from channel until 4 bytes have been read or an error occurs
- s = ssh_channel_read(sftp->channel, buffer + r, 4 - r, 0);
+ s = ssh_channel_read(sftp->channel, buffer + nread, 4 - nread, 0);
if (s < 0) {
goto error;
} else if (s == 0) {
@@ -355,9 +357,9 @@ sftp_packet sftp_packet_read(sftp_session sftp)
goto error;
}
} else {
- r += s;
+ nread += s;
}
- } while (r < 4);
+ } while (nread < 4);
size = sftp_get_u32(buffer);
if (size == 0 || size > SFTP_PACKET_SIZE_MAX) {
@@ -366,44 +368,44 @@ sftp_packet sftp_packet_read(sftp_session sftp)
}
do {
- r = ssh_channel_read(sftp->channel, buffer, 1, 0);
- if (r < 0) {
+ nread = ssh_channel_read(sftp->channel, buffer, 1, 0);
+ if (nread < 0) {
goto error;
- } else if (s == 0) {
+ } else if (nread == 0) {
is_eof = ssh_channel_is_eof(sftp->channel);
if (is_eof) {
goto error;
}
}
- } while (r < 1);
+ } while (nread < 1);
packet->type = buffer[0];
/* Remove the packet type size */
size -= sizeof(uint8_t);
- r = ssh_buffer_allocate_size(packet->payload, size);
- if (r < 0) {
+ nread = ssh_buffer_allocate_size(packet->payload, size);
+ if (nread < 0) {
ssh_set_error_oom(sftp->session);
goto error;
}
while (size > 0 && size < SFTP_PACKET_SIZE_MAX) {
- r = ssh_channel_read(sftp->channel,
+ nread = ssh_channel_read(sftp->channel,
buffer,
sizeof(buffer) > size ? size : sizeof(buffer),
0);
- if (r < 0) {
+ if (nread < 0) {
/* TODO: check if there are cases where an error needs to be set here */
goto error;
}
- if (r > 0) {
- rc = ssh_buffer_add_data(packet->payload, buffer, r);
+ if (nread > 0) {
+ rc = ssh_buffer_add_data(packet->payload, buffer, nread);
if (rc != 0) {
ssh_set_error_oom(sftp->session);
goto error;
}
- } else { /* r == 0 */
+ } else { /* nread == 0 */
/* Retry the reading unless the remote was closed */
is_eof = ssh_channel_is_eof(sftp->channel);
if (is_eof) {
@@ -411,7 +413,7 @@ sftp_packet sftp_packet_read(sftp_session sftp)
}
}
- size -= r;
+ size -= nread;
}
return packet;