summaryrefslogtreecommitdiffstats
path: root/libssh/agent.c
diff options
context:
space:
mode:
authorAndreas Schneider <mail@cynapses.org>2009-04-03 08:41:34 +0000
committerAndreas Schneider <mail@cynapses.org>2009-04-03 08:41:34 +0000
commit5a75c0fd78fa13d1a0eb8e1add643b581e71a315 (patch)
treeef72197d4494710e6f5060f995a1eeda028bf761 /libssh/agent.c
parent41dd2a2a3bc58409451b634ca9646d37fa6385d1 (diff)
downloadlibssh-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.c18
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;