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>
(cherry picked from commit 01135703a3)
This commit is contained in:
Andreas Schneider
2018-09-08 08:53:45 +02:00
parent dc587045bf
commit eb08802b7c

View File

@@ -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;