diff options
author | Alberto Aguirre <albaguirre@gmail.com> | 2018-09-21 10:31:32 +0200 |
---|---|---|
committer | Andreas Schneider <asn@cryptomilk.org> | 2018-09-25 16:41:54 +0200 |
commit | 14f5624ff53819f3707fe8da1aa465d8d171b37d (patch) | |
tree | dc4e40ff88baf0b53392fd5c8402e8942f6a7341 /src/sftp.c | |
parent | 9adc2d36eb6dc4c9fc34f4ad6695e945cfb7e7cf (diff) | |
download | libssh-14f5624ff53819f3707fe8da1aa465d8d171b37d.tar.gz libssh-14f5624ff53819f3707fe8da1aa465d8d171b37d.tar.xz libssh-14f5624ff53819f3707fe8da1aa465d8d171b37d.zip |
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>
Diffstat (limited to 'src/sftp.c')
-rw-r--r-- | src/sftp.c | 21 |
1 files changed, 21 insertions, 0 deletions
@@ -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){ |