diff options
Diffstat (limited to 'src/irc/dcc')
-rw-r--r-- | src/irc/dcc/dcc-chat.c | 28 | ||||
-rw-r--r-- | src/irc/dcc/dcc-files.c | 40 | ||||
-rw-r--r-- | src/irc/dcc/dcc.c | 28 |
3 files changed, 57 insertions, 39 deletions
diff --git a/src/irc/dcc/dcc-chat.c b/src/irc/dcc/dcc-chat.c index 44968ce0..afdb9d5b 100644 --- a/src/irc/dcc/dcc-chat.c +++ b/src/irc/dcc/dcc-chat.c @@ -59,7 +59,8 @@ DCC_REC *item_get_dcc(void *item) static void cmd_msg(const char *data) { DCC_REC *dcc; - char *params, *text, *target; + char *text, *target; + void *free_arg; g_return_if_fail(text != NULL); @@ -68,12 +69,13 @@ static void cmd_msg(const char *data) return; } - params = cmd_get_params(data, 2 | PARAM_FLAG_GETREST, &target, &text); + if (!cmd_get_params(data, &free_arg, 2 | PARAM_FLAG_GETREST, &target, &text)) + return; dcc = dcc_find_item(DCC_TYPE_CHAT, ++target, NULL); if (dcc != NULL) dcc_chat_send(dcc, text); - g_free(params); + cmd_params_free(free_arg); signal_stop(); } @@ -96,9 +98,9 @@ static void cmd_me(const char *data, IRC_SERVER_REC *server, WI_IRC_REC *item) static void cmd_action(const char *data, IRC_SERVER_REC *server) { - char *params, *target, *text; DCC_REC *dcc; - char *str; + char *target, *text, *str; + void *free_arg; g_return_if_fail(data != NULL); @@ -107,7 +109,8 @@ static void cmd_action(const char *data, IRC_SERVER_REC *server) return; } - params = cmd_get_params(data, 3 | PARAM_FLAG_GETREST, &target, &text); + if (!cmd_get_params(data, &free_arg, 3 | PARAM_FLAG_GETREST, &target, &text)) + return; if (*target == '\0' || *text == '\0') cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS); dcc = dcc_find_item(DCC_TYPE_CHAT, target+1, NULL); @@ -117,25 +120,26 @@ static void cmd_action(const char *data, IRC_SERVER_REC *server) g_free(str); } - g_free(params); + cmd_params_free(free_arg); signal_stop(); } static void cmd_ctcp(const char *data, IRC_SERVER_REC *server) { - char *params, *target, *ctcpcmd, *ctcpdata; DCC_REC *dcc; - char *str; + char *target, *ctcpcmd, *ctcpdata, *str; + void *free_arg; g_return_if_fail(data != NULL); if (server == NULL || !server->connected) cmd_return_error(CMDERR_NOT_CONNECTED); - params = cmd_get_params(data, 3 | PARAM_FLAG_GETREST, &target, &ctcpcmd, &ctcpdata); + if (!cmd_get_params(data, &free_arg, 3 | PARAM_FLAG_GETREST, &target, &ctcpcmd, &ctcpdata)) + return; if (*target == '\0' || *ctcpcmd == '\0') cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS); if (*target != '=') { /* handle only DCC CTCPs */ - g_free(params); + cmd_params_free(free_arg); return; } @@ -148,7 +152,7 @@ static void cmd_ctcp(const char *data, IRC_SERVER_REC *server) g_free(str); } - g_free(params); + cmd_params_free(free_arg); signal_stop(); } diff --git a/src/irc/dcc/dcc-files.c b/src/irc/dcc/dcc-files.c index e2dc732d..9a68813f 100644 --- a/src/irc/dcc/dcc-files.c +++ b/src/irc/dcc/dcc-files.c @@ -212,12 +212,14 @@ static void cmd_dcc_get(const char *data) { DCC_REC *dcc; GSList *tmp, *next; - char *params, *nick, *fname; + char *nick, *fname; + void *free_arg; int found; g_return_if_fail(data != NULL); - params = cmd_get_params(data, 2 | PARAM_FLAG_GETREST, &nick, &fname); + if (!cmd_get_params(data, &free_arg, 2 | PARAM_FLAG_GETREST, &nick, &fname)) + return; if (*nick == '\0') cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS); dcc = NULL; found = FALSE; @@ -235,7 +237,7 @@ static void cmd_dcc_get(const char *data) if (!found) signal_emit("dcc error get not found", 1, nick); - g_free(params); + cmd_params_free(free_arg); } static void dcc_resume_send(DCC_REC *dcc, int port) @@ -264,7 +266,8 @@ static void dcc_ctcp_msg(const char *data, IRC_SERVER_REC *server, const char *sender, const char *sendaddr, const char *target, DCC_REC *chat) { - char *params, *type, *arg, *portstr, *sizestr; + char *type, *arg, *portstr, *sizestr; + void *free_arg; unsigned long size; int port; DCC_REC *dcc; @@ -272,8 +275,9 @@ static void dcc_ctcp_msg(const char *data, IRC_SERVER_REC *server, g_return_if_fail(data != NULL); g_return_if_fail(sender != NULL); - params = cmd_get_params(data, 4 | PARAM_FLAG_NOQUOTES, - &type, &arg, &portstr, &sizestr); + if (!cmd_get_params(data, &free_arg, 4 | PARAM_FLAG_NOQUOTES, + &type, &arg, &portstr, &sizestr)) + return; port = atoi(portstr); size = atol(sizestr); @@ -281,7 +285,7 @@ static void dcc_ctcp_msg(const char *data, IRC_SERVER_REC *server, dcc = dcc_find_by_port(sender, port); if (dcc == NULL || !is_resume_type(type) || !is_resume_ok(type, dcc) || !is_accept_ok(type, dcc)) { - g_free(params); + cmd_params_free(free_arg); return; } @@ -298,7 +302,7 @@ static void dcc_ctcp_msg(const char *data, IRC_SERVER_REC *server, dcc_get_connect(dcc); } - g_free(params); + cmd_params_free(free_arg); } static void dcc_resume_rec(DCC_REC *dcc) @@ -331,12 +335,14 @@ static void cmd_dcc_resume(const char *data) { DCC_REC *dcc; GSList *tmp; - char *params, *nick, *fname; + char *nick, *fname; + void *free_arg; int found; g_return_if_fail(data != NULL); - params = cmd_get_params(data, 2 | PARAM_FLAG_GETREST, &nick, &fname); + if (!cmd_get_params(data, &free_arg, 2 | PARAM_FLAG_GETREST, &nick, &fname)) + return; if (*nick == '\0') cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS); dcc = NULL; found = FALSE; @@ -353,7 +359,7 @@ static void cmd_dcc_resume(const char *data) if (!found) signal_emit("dcc error get not found", 1, nick); - g_free(params); + cmd_params_free(free_arg); } /* input function: DCC SEND - we're ready to send more data */ @@ -483,7 +489,8 @@ static void dcc_send_init(DCC_REC *dcc) /* command: DCC SEND */ static void cmd_dcc_send(const char *data, IRC_SERVER_REC *server, WI_IRC_REC *item) { - char *params, *target, *fname, *str, *ptr; + char *target, *fname, *str, *ptr; + void *free_arg; char host[MAX_IP_LEN]; int hfile, hlisten, port; long fsize; @@ -492,7 +499,8 @@ static void cmd_dcc_send(const char *data, IRC_SERVER_REC *server, WI_IRC_REC *i g_return_if_fail(data != NULL); - params = cmd_get_params(data, 2 | PARAM_FLAG_GETREST, &target, &fname); + if (!cmd_get_params(data, &free_arg, 2 | PARAM_FLAG_GETREST, &target, &fname)) + return; if (*target == '\0' || *fname == '\0') cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS); /* if we're in dcc chat, send the request via it. */ @@ -506,7 +514,7 @@ static void cmd_dcc_send(const char *data, IRC_SERVER_REC *server, WI_IRC_REC *i if (dcc_find_item(DCC_TYPE_SEND, target, fname)) { signal_emit("dcc error send exists", 2, target, fname); - g_free(params); + cmd_params_free(free_arg); return; } @@ -525,7 +533,7 @@ static void cmd_dcc_send(const char *data, IRC_SERVER_REC *server, WI_IRC_REC *i if (hfile == -1) { signal_emit("dcc error file not found", 2, target, fname); - g_free(params); + cmd_params_free(free_arg); return; } fsize = lseek(hfile, 0, SEEK_END); @@ -565,7 +573,7 @@ static void cmd_dcc_send(const char *data, IRC_SERVER_REC *server, WI_IRC_REC *i g_free(str); g_free(fname); - g_free(params); + cmd_params_free(free_arg); } static void read_settings(void) diff --git a/src/irc/dcc/dcc.c b/src/irc/dcc/dcc.c index e514c934..75dc5459 100644 --- a/src/irc/dcc/dcc.c +++ b/src/irc/dcc/dcc.c @@ -278,7 +278,8 @@ static void dcc_get_address(const char *str, IPADDR *ip) /* Handle incoming DCC CTCP messages */ static void dcc_ctcp_msg(char *data, IRC_SERVER_REC *server, char *sender, char *sendaddr, char *target, DCC_REC *chat) { - char *params, *type, *arg, *addrstr, *portstr, *sizestr, *str; + char *type, *arg, *addrstr, *portstr, *sizestr, *str; + void *free_arg; const char *cstr; DCC_REC *dcc; gulong size; @@ -287,8 +288,9 @@ static void dcc_ctcp_msg(char *data, IRC_SERVER_REC *server, char *sender, char g_return_if_fail(data != NULL); g_return_if_fail(sender != NULL); - params = cmd_get_params(data, 5 | PARAM_FLAG_NOQUOTES, - &type, &arg, &addrstr, &portstr, &sizestr); + if (!cmd_get_params(data, &free_arg, 5 | PARAM_FLAG_NOQUOTES, + &type, &arg, &addrstr, &portstr, &sizestr)) + return; if (sscanf(portstr, "%d", &port) != 1) port = 0; if (sscanf(sizestr, "%lu", &size) != 1) size = 0; @@ -349,20 +351,22 @@ static void dcc_ctcp_msg(char *data, IRC_SERVER_REC *server, char *sender, char break; } - g_free(params); + cmd_params_free(free_arg); } /* Handle incoming DCC CTCP replies */ static void dcc_ctcp_reply(char *data, IRC_SERVER_REC *server, char *sender, char *sendaddr) { - char *params, *cmd, *subcmd, *args; + char *cmd, *subcmd, *args; + void *free_arg; int type; DCC_REC *dcc; g_return_if_fail(data != NULL); g_return_if_fail(sender != NULL); - params = cmd_get_params(data, 3 | PARAM_FLAG_GETREST, &cmd, &subcmd, &args); + if (!cmd_get_params(data, &free_arg, 3 | PARAM_FLAG_GETREST, &cmd, &subcmd, &args)) + return; if (g_strcasecmp(cmd, "REJECT") == 0) { @@ -380,7 +384,7 @@ static void dcc_ctcp_reply(char *data, IRC_SERVER_REC *server, char *sender, cha signal_emit("dcc unknown reply", 3, data, sender, sendaddr); } - g_free(params); + cmd_params_free(free_arg); } static void dcc_reject(DCC_REC *dcc, IRC_SERVER_REC *server) @@ -409,20 +413,22 @@ static void cmd_dcc_close(char *data, IRC_SERVER_REC *server) { DCC_REC *dcc; GSList *tmp, *next; - char *params, *type, *nick, *arg; + char *type, *nick, *arg; + void *free_arg; gboolean found; int itype; g_return_if_fail(data != NULL); - params = cmd_get_params(data, 3, &type, &nick, &arg); + if (!cmd_get_params(data, &free_arg, 3, &type, &nick, &arg)) + return; g_strup(type); itype = dcc_str2type(type); if (itype == 0) { signal_emit("dcc error unknown type", 1, type); - g_free(params); + cmd_params_free(free_arg); return; } @@ -442,7 +448,7 @@ static void cmd_dcc_close(char *data, IRC_SERVER_REC *server) if (!found) signal_emit("dcc error close not found", 3, type, nick, arg); - g_free(params); + cmd_params_free(free_arg); } static void cmd_dcc(const char *data, IRC_SERVER_REC *server, WI_IRC_REC *item) |