Don't leak memory.

git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@527 7dcaeef0-15fb-0310-b436-a5af3365683c
This commit is contained in:
Andreas Schneider
2009-04-17 14:53:24 +00:00
parent bf4d29b963
commit 44ab293f0b

View File

@@ -248,6 +248,7 @@ void publickey_free(PUBLIC_KEY *key) {
} }
PUBLIC_KEY *publickey_from_string(SSH_SESSION *session, STRING *pubkey_s) { PUBLIC_KEY *publickey_from_string(SSH_SESSION *session, STRING *pubkey_s) {
PUBLIC_KEY *key = NULL;
BUFFER *tmpbuf = NULL; BUFFER *tmpbuf = NULL;
STRING *type_s = NULL; STRING *type_s = NULL;
char *type = 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) { if(strcmp(type, "ssh-dss") == 0) {
SAFE_FREE(type); 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) { if(strcmp(type,"ssh-rsa") == 0) {
SAFE_FREE(type); 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) { if (strcmp(type,"ssh-rsa1") == 0) {
SAFE_FREE(type); 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); ssh_set_error(session, SSH_FATAL, "Unknown public key protocol %s", type);