summaryrefslogtreecommitdiffstats
path: root/libssh
diff options
context:
space:
mode:
Diffstat (limited to 'libssh')
-rw-r--r--libssh/sftp.c45
1 files changed, 25 insertions, 20 deletions
diff --git a/libssh/sftp.c b/libssh/sftp.c
index 787cf74..5e5bfdc 100644
--- a/libssh/sftp.c
+++ b/libssh/sftp.c
@@ -631,28 +631,33 @@ static void status_msg_free(STATUS_MESSAGE *status){
}
static SFTP_FILE *parse_handle_msg(SFTP_MESSAGE *msg){
- SFTP_FILE *file;
- if(msg->packet_type != SSH_FXP_HANDLE){
- ssh_set_error(msg->sftp->session,SSH_FATAL,"Not a ssh_fxp_handle message passed in !");
- return NULL;
- }
+ SFTP_FILE *file;
- file = malloc(sizeof(SFTP_FILE));
- if (file == NULL) {
- return NULL;
- }
+ if(msg->packet_type != SSH_FXP_HANDLE) {
+ ssh_set_error(msg->sftp->session, SSH_FATAL,
+ "Not a ssh_fxp_handle message passed in!");
+ return NULL;
+ }
- memset(file,0,sizeof(*file));
- file->sftp=msg->sftp;
- file->handle=buffer_get_ssh_string(msg->payload);
- file->offset=0;
- file->eof=0;
- if(!file->handle){
- ssh_set_error(msg->sftp->session,SSH_FATAL,"Invalid SSH_FXP_HANDLE message");
- free(file);
- return NULL;
- }
- return file;
+ file = malloc(sizeof(SFTP_FILE));
+ if (file == NULL) {
+ return NULL;
+ }
+ ZERO_STRUCTP(file);
+
+ file->handle = buffer_get_ssh_string(msg->payload);
+ if (file->handle == NULL) {
+ ssh_set_error(msg->sftp->session, SSH_FATAL,
+ "Invalid SSH_FXP_HANDLE message");
+ SAFE_FREE(file);
+ return NULL;
+ }
+
+ file->sftp = msg->sftp;
+ file->offset = 0;
+ file->eof = 0;
+
+ return file;
}
/* Open a directory */