sftpserver: allocate packet on sftp_server_new

Ensure sftp_server_new allocates the packet and payload as
sftp_packet_read now expects the packet and payload to be
pre-allocated.

Similarly, ensure sftp_get_client_message does not free the packet.

Signed-off-by: Alberto Aguirre <albaguirre@gmail.com>
Reviewed-by: Andreas Schneider <asn@cryptomilk.org>
(cherry picked from commit 14f5624ff5)
This commit is contained in:
Alberto Aguirre
2018-09-21 10:31:32 +02:00
committed by Andreas Schneider
parent bd7e8295e2
commit afa5dbb8b1
2 changed files with 21 additions and 2 deletions

View File

@@ -211,10 +211,31 @@ sftp_session sftp_server_new(ssh_session session, ssh_channel chan){
return NULL;
}
sftp->read_packet = calloc(1, sizeof(struct sftp_packet_struct));
if (sftp->read_packet == NULL) {
goto error;
}
sftp->read_packet->payload = ssh_buffer_new();
if (sftp->read_packet->payload == NULL) {
goto error;
}
sftp->session = session;
sftp->channel = chan;
return sftp;
error:
ssh_set_error_oom(session);
if (sftp->read_packet != NULL) {
if (sftp->read_packet->payload != NULL) {
ssh_buffer_free(sftp->read_packet->payload);
}
SAFE_FREE(sftp->read_packet);
}
SAFE_FREE(sftp);
return NULL;
}
int sftp_server_init(sftp_session sftp){

View File

@@ -232,8 +232,6 @@ sftp_client_message sftp_get_client_message(sftp_session sftp) {
return NULL;
}
sftp_packet_free(packet);
return msg;
}