1
1

sftp: Check if the channel is still valid

Fixes T138

Reported-by: Jan Pazdziora <jpazdziora@redhat.com>
Signed-off-by: Andreas Schneider <asn@cryptomilk.org>
Reviewed-by: Jakub Jelen <jjelen@redhat.com>
Этот коммит содержится в:
Andreas Schneider 2019-04-29 10:16:44 +02:00
родитель 5ffc595d0d
Коммит c4348c7b3c
2 изменённых файлов: 18 добавлений и 13 удалений

Просмотреть файл

@ -1150,13 +1150,15 @@ void ssh_channel_do_free(ssh_channel channel)
ssh_list_remove(session->channels, it); ssh_list_remove(session->channels, it);
} }
ssh_buffer_free(channel->stdout_buffer); SSH_BUFFER_FREE(channel->stdout_buffer);
ssh_buffer_free(channel->stderr_buffer); SSH_BUFFER_FREE(channel->stderr_buffer);
if (channel->callbacks != NULL) { if (channel->callbacks != NULL) {
ssh_list_free(channel->callbacks); ssh_list_free(channel->callbacks);
channel->callbacks = NULL;
} }
channel->session = NULL;
SAFE_FREE(channel); SAFE_FREE(channel);
} }
@ -1194,7 +1196,7 @@ int ssh_channel_send_eof(ssh_channel channel)
int rc = SSH_ERROR; int rc = SSH_ERROR;
int err; int err;
if(channel == NULL) { if (channel == NULL || channel->session == NULL) {
return rc; return rc;
} }

Просмотреть файл

@ -308,17 +308,20 @@ void sftp_free(sftp_session sftp)
return; return;
} }
ssh_channel_send_eof(sftp->channel); if (sftp->channel != NULL) {
ptr = sftp->queue; ssh_channel_send_eof(sftp->channel);
while(ptr) { ptr = sftp->queue;
sftp_request_queue old; while(ptr) {
sftp_message_free(ptr->message); sftp_request_queue old;
old = ptr->next; sftp_message_free(ptr->message);
SAFE_FREE(ptr); old = ptr->next;
ptr = old; SAFE_FREE(ptr);
} ptr = old;
}
ssh_channel_free(sftp->channel); ssh_channel_free(sftp->channel);
sftp->channel = NULL;
}
SAFE_FREE(sftp->handles); SAFE_FREE(sftp->handles);
SSH_BUFFER_FREE(sftp->read_packet->payload); SSH_BUFFER_FREE(sftp->read_packet->payload);