From 44ab293f0b7d52de26380df9ec2ac88806d6aeff Mon Sep 17 00:00:00 2001 From: Andreas Schneider Date: Fri, 17 Apr 2009 14:53:24 +0000 Subject: Don't leak memory. git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@527 7dcaeef0-15fb-0310-b436-a5af3365683c --- libssh/keys.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/libssh/keys.c b/libssh/keys.c index 04ddcd0..c4b47f4 100644 --- a/libssh/keys.c +++ b/libssh/keys.c @@ -248,6 +248,7 @@ void publickey_free(PUBLIC_KEY *key) { } PUBLIC_KEY *publickey_from_string(SSH_SESSION *session, STRING *pubkey_s) { + PUBLIC_KEY *key = NULL; BUFFER *tmpbuf = NULL; STRING *type_s = NULL; char *type = NULL; @@ -276,15 +277,21 @@ PUBLIC_KEY *publickey_from_string(SSH_SESSION *session, STRING *pubkey_s) { if(strcmp(type, "ssh-dss") == 0) { SAFE_FREE(type); - return publickey_make_dss(session, tmpbuf); + key = publickey_make_dss(session, tmpbuf); + buffer_free(tmpbuf); + return key; } if(strcmp(type,"ssh-rsa") == 0) { SAFE_FREE(type); - return publickey_make_rsa(session, tmpbuf,"ssh-rsa"); + key = publickey_make_rsa(session, tmpbuf,"ssh-rsa"); + buffer_free(tmpbuf); + return key; } if (strcmp(type,"ssh-rsa1") == 0) { SAFE_FREE(type); - return publickey_make_rsa(session, tmpbuf,"ssh-rsa1"); + key = publickey_make_rsa(session, tmpbuf,"ssh-rsa1"); + buffer_free(tmpbuf); + return key; } ssh_set_error(session, SSH_FATAL, "Unknown public key protocol %s", type); -- cgit