Fixed CMODE sending and receiving when it comes to channel
[silc.git] / lib / silcclient / command.c
index 19b9fc6c07646ace947e14477d9593e2b893e639..f7fd114af9e53d24f93099f03c5629d368df605d 100644 (file)
@@ -727,11 +727,14 @@ SILC_FSM_STATE(silc_client_command_whois)
                                           SILC_ATTRIBUTE_USER_PUBLIC_KEY,
                                           SILC_ATTRIBUTE_FLAG_VALID,
                                           &obj, sizeof(obj));
+    silc_free(obj.data);
   }
 
-  silc_client_nickname_parse(client, conn, cmd->argv[1], &nickname);
-  if (!nickname)
-    nickname = strdup(cmd->argv[1]);
+  if (nick) {
+    silc_client_nickname_parse(client, conn, cmd->argv[1], &nickname);
+    if (!nickname)
+      nickname = strdup(cmd->argv[1]);
+  }
 
   /* Send command */
   silc_client_command_send_va(conn, cmd, cmd->cmd, NULL, NULL,
@@ -1833,10 +1836,14 @@ SILC_FSM_STATE(silc_client_command_cmode)
                                      NULL, NULL, 1,
                                      1, silc_buffer_datalen(chidp));
          silc_buffer_free(chidp);
+         silc_client_unref_channel(client, conn, channel);
 
          /* Notify application */
          COMMAND(SILC_STATUS_OK);
-         goto out;
+
+         /** Wait for command reply */
+         silc_fsm_next(fsm, silc_client_command_reply_wait);
+         return SILC_FSM_CONTINUE;
        }
 
        if (cmd->argc >= 4) {