silcclient: Fix error path memory freeing
authorPekka Riikonen <priikone@silcnet.org>
Wed, 28 May 2014 10:56:32 +0000 (13:56 +0300)
committerPekka Riikonen <priikone@silcnet.org>
Wed, 28 May 2014 10:56:32 +0000 (13:56 +0300)
lib/silcclient/client.c

index f2db81e04f2ae76ff3b7611f98589bac236bffe2..1d64e02fd502848d099880b396bec665e42160b7 100644 (file)
@@ -604,7 +604,7 @@ silc_client_add_connection(SilcClient client,
   SilcClientConnection conn;
   SilcFSMThread thread;
 
-  if (!callback)
+  if (!client || !callback || !remote_host)
     return NULL;
 
   SILC_LOG_DEBUG(("Adding new connection to %s:%d", remote_host, port));
@@ -624,6 +624,7 @@ silc_client_add_connection(SilcClient client,
 
   conn->internal = silc_calloc(1, sizeof(*conn->internal));
   if (!conn->internal) {
+    silc_free(conn->remote_host);
     silc_free(conn);
     return NULL;
   }
@@ -632,8 +633,9 @@ silc_client_add_connection(SilcClient client,
   silc_atomic_init16(&conn->internal->cmd_ident, 0);
 
   if (!silc_hash_alloc("sha1", &conn->internal->sha1hash)) {
-    silc_free(conn);
+    silc_free(conn->remote_host);
     silc_free(conn->internal);
+    silc_free(conn);
     return NULL;
   }