X-Git-Url: http://git.silcnet.org/gitweb/?p=silc.git;a=blobdiff_plain;f=lib%2Fsilcclient%2Fcommand.c;h=b5827f22819405d28285b296fdb10e15997d93c9;hp=abc94ef873da41bcb5bde3bc0fa31d48435c9ff8;hb=805fddcf6431e784f9f77114782a90c9d12f9cbe;hpb=664b22d58794a76de354831dc44c9ad14e91e389 diff --git a/lib/silcclient/command.c b/lib/silcclient/command.c index abc94ef8..b5827f22 100644 --- a/lib/silcclient/command.c +++ b/lib/silcclient/command.c @@ -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);