From 1fd7a875beca36597e987729bd76928a9593cfd1 Mon Sep 17 00:00:00 2001 From: Aris Adamantiadis Date: Sun, 29 Mar 2009 20:29:55 +0000 Subject: Fixed memory leak and file descriptor leak in known host parsing git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@307 7dcaeef0-15fb-0310-b436-a5af3365683c --- libssh/keyfiles.c | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/libssh/keyfiles.c b/libssh/keyfiles.c index 2ce9f868..a4cec4e6 100644 --- a/libssh/keyfiles.c +++ b/libssh/keyfiles.c @@ -789,13 +789,10 @@ static int alldigits(char *s) * @{ */ /** - * @brief Lowercase a string. - * - * @param str String to lowercase. - * - * @return The lowered string or NULL on error. - * - * @internal + * \brief Lowercase a string. + * \param str String to lowercase. + * \return The malloced lowered string or NULL on error. + * \internal */ static char *lowercase(const char* str) { char *p = 0; @@ -1061,13 +1058,12 @@ int ssh_is_server_known(SSH_SESSION *session){ match=check_public_key(session,tokens); tokens_free(tokens); if(match<0){ - leave_function(); - return SSH_SERVER_ERROR; + ret = SSH_SERVER_ERROR; + break; } if(match==1){ - fclose(file); - leave_function(); - return SSH_SERVER_KNOWN_OK; + ret=SSH_SERVER_KNOWN_OK; + break; } if(match==0){ /* We override the status with the wrong key state */ @@ -1076,6 +1072,8 @@ int ssh_is_server_known(SSH_SESSION *session){ } } while (1); SAFE_FREE(host); + if(file) + fclose(file); /* Return the current state at end of file */ leave_function(); return ret; -- cgit