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>
Этот коммит содержится в:
родитель
5ffc595d0d
Коммит
c4348c7b3c
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
23
src/sftp.c
23
src/sftp.c
@ -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);
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user