[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] sftpserver: allocate packet on sftp_server_new
[Thread Prev] | [Thread Next]
- Subject: [PATCH] sftpserver: allocate packet on sftp_server_new
- From: Alberto Aguirre <albaguirre@xxxxxxxxx>
- Reply-to: libssh@xxxxxxxxxx
- Date: Fri, 21 Sep 2018 10:31:32 +0200
- To: libssh@xxxxxxxxxx
- Cc: Alberto Aguirre <albaguirre@xxxxxxxxx>
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@xxxxxxxxx> --- src/sftp.c | 21 +++++++++++++++++++++ src/sftpserver.c | 2 -- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/sftp.c b/src/sftp.c index 9a98d444..9dec687a 100644 --- a/src/sftp.c +++ b/src/sftp.c @@ -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){ diff --git a/src/sftpserver.c b/src/sftpserver.c index 3cb30090..1717aa41 100644 --- a/src/sftpserver.c +++ b/src/sftpserver.c @@ -232,8 +232,6 @@ sftp_client_message sftp_get_client_message(sftp_session sftp) { return NULL; } - sftp_packet_free(packet); - return msg; } -- 2.17.1
Archive administrator: postmaster@lists.cynapses.org