diff options
author | Andreas Schneider <mail@cynapses.org> | 2009-04-03 08:41:34 +0000 |
---|---|---|
committer | Andreas Schneider <mail@cynapses.org> | 2009-04-03 08:41:34 +0000 |
commit | 5a75c0fd78fa13d1a0eb8e1add643b581e71a315 (patch) | |
tree | ef72197d4494710e6f5060f995a1eeda028bf761 /libssh/agent.c | |
parent | 41dd2a2a3bc58409451b634ca9646d37fa6385d1 (diff) | |
download | libssh-5a75c0fd78fa13d1a0eb8e1add643b581e71a315.tar.gz libssh-5a75c0fd78fa13d1a0eb8e1add643b581e71a315.tar.xz libssh-5a75c0fd78fa13d1a0eb8e1add643b581e71a315.zip |
Don't leak memory in agent_new() error path.
git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@378 7dcaeef0-15fb-0310-b436-a5af3365683c
Diffstat (limited to 'libssh/agent.c')
-rw-r--r-- | libssh/agent.c | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/libssh/agent.c b/libssh/agent.c index 9bfdf1d..10d6678 100644 --- a/libssh/agent.c +++ b/libssh/agent.c @@ -119,13 +119,17 @@ static size_t atomicio(struct socket *s, void *buf, size_t n, int do_read) { AGENT *agent_new(struct ssh_session *session) { AGENT *agent = NULL; - agent = calloc(1, sizeof(*agent)); - if (agent) { - agent->count = 0; - agent->sock = ssh_socket_new(session); - if (agent->sock == NULL) { - return NULL; - } + agent = malloc(sizeof(AGENT)); + if (agent == NULL) { + return NULL; + } + ZERO_STRUCTP(agent); + + agent->count = 0; + agent->sock = ssh_socket_new(session); + if (agent->sock == NULL) { + SAFE_FREE(agent); + return NULL; } return agent; |