diff --git a/src/sftp.c b/src/sftp.c index 91bccf10..00b5b98f 100644 --- a/src/sftp.c +++ b/src/sftp.c @@ -191,14 +191,38 @@ sftp_new_channel(ssh_session session, ssh_channel channel) sftp->ext = sftp_ext_new(); if (sftp->ext == NULL) { ssh_set_error_oom(session); - SAFE_FREE(sftp); - return NULL; + goto error; + } + + sftp->read_packet = calloc(1, sizeof(struct sftp_packet_struct)); + if (sftp->read_packet == NULL) { + ssh_set_error_oom(session); + goto error; + } + + sftp->read_packet->payload = ssh_buffer_new(); + if (sftp->read_packet->payload == NULL) { + ssh_set_error_oom(session); + goto error; } sftp->session = session; sftp->channel = channel; return sftp; + +error: + if (sftp->ext != NULL) { + sftp_ext_free(sftp->ext); + } + 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; } #ifdef WITH_SERVER