aboutsummaryrefslogtreecommitdiff
path: root/src/sftp.c
diff options
context:
space:
mode:
authorAlberto Aguirre <albaguirre@gmail.com>2018-09-21 10:31:32 +0200
committerAndreas Schneider <asn@cryptomilk.org>2018-09-25 16:41:54 +0200
commit14f5624ff53819f3707fe8da1aa465d8d171b37d (patch)
treedc4e40ff88baf0b53392fd5c8402e8942f6a7341 /src/sftp.c
parent9adc2d36eb6dc4c9fc34f4ad6695e945cfb7e7cf (diff)
downloadlibssh-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.c21
1 files changed, 21 insertions, 0 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){