1
0
mirror of https://git.libssh.org/projects/libssh.git synced 2025-12-02 01:17:52 +03:00

Improve parse_status_msg().

git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@585 7dcaeef0-15fb-0310-b436-a5af3365683c
This commit is contained in:
Andreas Schneider
2009-04-23 07:06:07 +00:00
parent a0b4b239fb
commit 56e13b227f

View File

@@ -581,8 +581,10 @@ static inline u32 sftp_get_new_id(SFTP_SESSION *session) {
static STATUS_MESSAGE *parse_status_msg(SFTP_MESSAGE *msg){ static STATUS_MESSAGE *parse_status_msg(SFTP_MESSAGE *msg){
STATUS_MESSAGE *status; STATUS_MESSAGE *status;
if(msg->packet_type != SSH_FXP_STATUS){
ssh_set_error(msg->sftp->session, SSH_FATAL,"Not a ssh_fxp_status message passed in !"); if (msg->packet_type != SSH_FXP_STATUS) {
ssh_set_error(msg->sftp->session, SSH_FATAL,
"Not a ssh_fxp_status message passed in!");
return NULL; return NULL;
} }
@@ -590,22 +592,32 @@ static STATUS_MESSAGE *parse_status_msg(SFTP_MESSAGE *msg){
if (status == NULL) { if (status == NULL) {
return NULL; return NULL;
} }
ZERO_STRUCTP(status);
memset(status,0,sizeof(*status)); status->id = msg->id;
status->id=msg->id; if ((buffer_get_u32(msg->payload,&status->status) != 4) ||
if( (buffer_get_u32(msg->payload,&status->status)!= 4) (status->error = buffer_get_ssh_string(msg->payload)) == NULL ||
|| !(status->error=buffer_get_ssh_string(msg->payload)) || (status->lang = buffer_get_ssh_string(msg->payload)) == NULL) {
!(status->lang=buffer_get_ssh_string(msg->payload))){ string_free(status->error);
if(status->error)
free(status->error);
/* status->lang never get allocated if something failed */ /* status->lang never get allocated if something failed */
free(status); SAFE_FREE(status);
ssh_set_error(msg->sftp->session,SSH_FATAL,"invalid SSH_FXP_STATUS message"); ssh_set_error(msg->sftp->session, SSH_FATAL,
"Invalid SSH_FXP_STATUS message");
return NULL; return NULL;
} }
status->status=ntohl(status->status);
status->errormsg=string_to_char(status->error); status->status = ntohl(status->status);
status->langmsg=string_to_char(status->lang); status->errormsg = string_to_char(status->error);
status->langmsg = string_to_char(status->lang);
if (status->errormsg == NULL || status->langmsg == NULL) {
string_free(status->error);
string_free(status->lang);
SAFE_FREE(status->errormsg);
SAFE_FREE(status->langmsg);
SAFE_FREE(status);
return NULL;
}
return status; return status;
} }