Static analyzer bug fixes
[silc.git] / lib / silcclient / command_reply.c
index 910aab545be02edd180c36a8dbc8e3cca64077fb..54b77757742ba6bca9711be3d5f91cb41eab72ba 100644 (file)
@@ -118,6 +118,7 @@ static void silc_client_command_process_error(SilcClientCommandContext cmd,
     client_entry = silc_client_get_client_by_id(client, conn, &id.u.client_id);
     if (client_entry) {
       silc_client_remove_from_channels(client, conn, client_entry);
+      client_entry->internal.valid = FALSE;
       silc_client_del_client(client, conn, client_entry);
       silc_client_unref_client(client, conn, client_entry);
     }
@@ -947,6 +948,7 @@ SILC_FSM_STATE(silc_client_command_reply_kill)
   /* Remove the client */
   if (client_entry) {
     silc_client_remove_from_channels(client, conn, client_entry);
+    client_entry->internal.valid = FALSE;
     silc_client_del_client(client, conn, client_entry);
     silc_client_unref_client(client, conn, client_entry);
   }
@@ -1170,6 +1172,17 @@ SILC_FSM_STATE(silc_client_command_reply_join)
     silc_client_ref_channel(client, conn, channel);
   }
 
+  /* Get hmac */
+  hmac = silc_argument_get_arg_type(args, 11, NULL);
+  if (hmac && !silc_hmac_is_supported(hmac)) {
+    if (cmd->verbose)
+      SAY(client, conn, SILC_CLIENT_MESSAGE_COMMAND_ERROR,
+         "Cannot join channel: Unsupported HMAC `%s'", hmac);
+    ERROR_CALLBACK(SILC_STATUS_ERR_UNKNOWN_ALGORITHM);
+    silc_rwlock_unlock(channel->internal.lock);
+    goto out;
+  }
+
   /* Get the list count */
   tmp = silc_argument_get_arg_type(args, 12, &len);
   if (!tmp) {
@@ -1243,19 +1256,6 @@ SILC_FSM_STATE(silc_client_command_reply_join)
     }
   }
 
-  /* Get hmac */
-  hmac = silc_argument_get_arg_type(args, 11, NULL);
-  if (hmac) {
-    if (!silc_hmac_alloc(hmac, NULL, &channel->internal.hmac)) {
-      if (cmd->verbose)
-       SAY(client, conn, SILC_CLIENT_MESSAGE_COMMAND_ERROR,
-           "Cannot join channel: Unsupported HMAC `%s'", hmac);
-      ERROR_CALLBACK(SILC_STATUS_ERR_UNKNOWN_ALGORITHM);
-      silc_rwlock_unlock(channel->internal.lock);
-      goto out;
-    }
-  }
-
   /* Get channel mode */
   tmp = silc_argument_get_arg_type(args, 5, &len);
   if (tmp && len == 4)
@@ -2016,7 +2016,7 @@ SILC_FSM_STATE(silc_client_command_reply_getkey)
   SilcServerEntry server_entry;
   unsigned char *tmp;
   SilcUInt32 len;
-  SilcPublicKey public_key;
+  SilcPublicKey public_key = NULL;
   SilcID id;
 
   /* Sanity checks */