From 20e7ec96ae01d4367a7fbcd87bdbf0fa6496492b Mon Sep 17 00:00:00 2001 From: Aris Adamantiadis Date: Wed, 28 Apr 2010 18:43:41 +0200 Subject: Fix bugs found by clang analyzer --- libssh/kex.c | 19 ++++++++++--------- libssh/keyfiles.c | 7 ++++--- libssh/sftp.c | 6 ++---- 3 files changed, 16 insertions(+), 16 deletions(-) (limited to 'libssh') diff --git a/libssh/kex.c b/libssh/kex.c index a411755..ca67894 100644 --- a/libssh/kex.c +++ b/libssh/kex.c @@ -202,7 +202,7 @@ char **space_tokenize(const char *chain){ /* find_matching gets 2 parameters : a list of available objects (available_d), separated by colons,*/ /* and a list of preferred objects (preferred_d) */ -/* it will return a strduped pointer on the first prefered object found in the available objects list */ +/* it will return a strduped pointer on the first preferred object found in the available objects list */ char *ssh_find_matching(const char *available_d, const char *preferred_d){ char ** tok_available, **tok_preferred; @@ -222,6 +222,7 @@ char *ssh_find_matching(const char *available_d, const char *preferred_d){ if (tok_preferred == NULL) { SAFE_FREE(tok_available[0]); SAFE_FREE(tok_available); + return NULL; } for(i_pref=0; tok_preferred[i_pref] ; ++i_pref){ @@ -230,18 +231,18 @@ char *ssh_find_matching(const char *available_d, const char *preferred_d){ /* match */ ret=strdup(tok_available[i_avail]); /* free the tokens */ - free(tok_available[0]); - free(tok_preferred[0]); - free(tok_available); - free(tok_preferred); + SAFE_FREE(tok_available[0]); + SAFE_FREE(tok_preferred[0]); + SAFE_FREE(tok_available); + SAFE_FREE(tok_preferred); return ret; } } } - free(tok_available[0]); - free(tok_preferred[0]); - free(tok_available); - free(tok_preferred); + SAFE_FREE(tok_available[0]); + SAFE_FREE(tok_preferred[0]); + SAFE_FREE(tok_available); + SAFE_FREE(tok_preferred); return NULL; } diff --git a/libssh/keyfiles.c b/libssh/keyfiles.c index 8c50776..a5aae8c 100644 --- a/libssh/keyfiles.c +++ b/libssh/keyfiles.c @@ -593,12 +593,13 @@ static int pem_get_password(char *buf, int size, int rwflag, void *userdata) { /* unused flag */ (void) rwflag; - - ZERO_STRUCTP(buf); + if(buf==NULL) + return 0; + memset(buf,'\0',size); ssh_log(session, SSH_LOG_RARE, "Trying to call external authentication function"); - if (session && session->callbacks->auth_function) { + if (session && session->callbacks && session->callbacks->auth_function) { if (session->callbacks->auth_function("Passphrase for private key:", buf, size, 0, 0, session->callbacks->userdata) < 0) { return 0; diff --git a/libssh/sftp.c b/libssh/sftp.c index 5141142..82c0034 100644 --- a/libssh/sftp.c +++ b/libssh/sftp.c @@ -104,12 +104,10 @@ static void sftp_ext_free(sftp_ext ext) { sftp_session sftp_new(ssh_session session){ sftp_session sftp; - enter_function(); - if (session == NULL) { - leave_function(); return NULL; } + enter_function(); sftp = malloc(sizeof(struct sftp_session_struct)); if (sftp == NULL) { @@ -123,7 +121,7 @@ sftp_session sftp_new(ssh_session session){ if (sftp->ext == NULL) { ssh_set_error_oom(session); SAFE_FREE(sftp); - sftp_leave_function(); + leave_function(); return NULL; } -- cgit v1.2.3