diff options
-rw-r--r-- | libssh/sftpserver.c | 36 |
1 files changed, 24 insertions, 12 deletions
diff --git a/libssh/sftpserver.c b/libssh/sftpserver.c index 4e1cebff..901ad862 100644 --- a/libssh/sftpserver.c +++ b/libssh/sftpserver.c @@ -332,22 +332,34 @@ int sftp_reply_names_add(SFTP_CLIENT_MESSAGE *msg, const char *file, return 0; } -int sftp_reply_names(SFTP_CLIENT_MESSAGE *msg){ - BUFFER *out=buffer_new(); - int r; - buffer_add_u32(out,msg->id); - buffer_add_u32(out,htonl(msg->attr_num)); - buffer_add_data(out,buffer_get(msg->attrbuf), - buffer_get_len(msg->attrbuf)); - r=sftp_packet_write(msg->sftp,SSH_FXP_NAME,out); +int sftp_reply_names(SFTP_CLIENT_MESSAGE *msg) { + BUFFER *out; + + out = buffer_new(); + if (out == NULL) { + buffer_free(msg->attrbuf); + return -1; + } + + if (buffer_add_u32(out, msg->id) < 0 || + buffer_add_u32(out, htonl(msg->attr_num)) < 0 || + buffer_add_data(out, buffer_get(msg->attrbuf), + buffer_get_len(msg->attrbuf)) < 0 || + sftp_packet_write(msg->sftp, SSH_FXP_NAME, out) < 0) { buffer_free(out); buffer_free(msg->attrbuf); - msg->attr_num=0; - msg->attrbuf=NULL; - return r<0; + return -1; + } + + buffer_free(out); + buffer_free(msg->attrbuf); + + msg->attr_num = 0; + msg->attrbuf = NULL; + + return 0; } - int sftp_reply_status(SFTP_CLIENT_MESSAGE *msg, u32 status, char *message){ BUFFER *out=buffer_new(); int r; |