Merge commit 'origin/silc.1.1.branch'
[silc.git] / lib / silcclient / command.c
index abc94ef873da41bcb5bde3bc0fa31d48435c9ff8..b5827f22819405d28285b296fdb10e15997d93c9 100644 (file)
@@ -411,6 +411,7 @@ SilcUInt16 silc_client_command_call(SilcClient client,
   SilcUInt32 argc = 0;
   unsigned char **argv = NULL;
   SilcUInt32 *argv_lens = NULL, *argv_types = NULL;
+  SilcUInt16 cmd_ident;
   SilcClientCommand command;
   SilcClientCommandContext cmd;
   char *arg;
@@ -480,7 +481,7 @@ SilcUInt16 silc_client_command_call(SilcClient client,
   cmd->argv = argv;
   cmd->argv_lens = argv_lens;
   cmd->argv_types = argv_types;
-  cmd->cmd_ident = silc_client_cmd_ident(conn);
+  cmd_ident = cmd->cmd_ident = silc_client_cmd_ident(conn);
   cmd->called = TRUE;
   cmd->verbose = TRUE;
   silc_list_init(cmd->reply_callbacks,
@@ -492,7 +493,7 @@ SilcUInt16 silc_client_command_call(SilcClient client,
                       silc_client_command_destructor, NULL, FALSE);
   silc_fsm_start_sync(&cmd->thread, command->command);
 
-  return cmd->cmd_ident;
+  return cmd_ident;
 }
 
 /* Generic function to send any command. The arguments must be sent already
@@ -731,9 +732,8 @@ SILC_FSM_STATE(silc_client_command_whois)
   }
 
   if (nick) {
-    silc_client_nickname_parse(client, conn, cmd->argv[1], &nickname);
-    if (!nickname)
-      nickname = strdup(cmd->argv[1]);
+    if (!silc_client_nickname_parse(client, conn, cmd->argv[1], &nickname))
+      goto out;
   }
 
   /* Send command */
@@ -1051,7 +1051,10 @@ SILC_FSM_STATE(silc_client_command_invite)
   /* Parse the typed nickname. */
   if (cmd->argc == 3) {
     if (cmd->argv[2][0] != '+' && cmd->argv[2][0] != '-') {
-      silc_client_nickname_parse(client, conn, cmd->argv[2], &nickname);
+      if (!silc_client_nickname_parse(client, conn, cmd->argv[2], &nickname)) {
+       silc_client_unref_channel(client, conn, channel);
+       goto out;
+      }
 
       /* Find client entry */
       clients = silc_client_get_clients_local(client, conn, cmd->argv[2],
@@ -2120,7 +2123,8 @@ SILC_FSM_STATE(silc_client_command_cumode)
   }
 
   /* Parse the typed nickname. */
-  silc_client_nickname_parse(client, conn, cmd->argv[3], &nickname);
+  if (!silc_client_nickname_parse(client, conn, cmd->argv[3], &nickname))
+    goto out;
 
   /* Find client entry */
   clients = silc_client_get_clients_local(client, conn, cmd->argv[3], FALSE);