From: pk910 Date: Thu, 2 Feb 2012 19:42:19 +0000 (+0100) Subject: fixed several memory leaks X-Git-Tag: v5.3~29 X-Git-Url: http://git.pk910.de/?p=NeonServV5.git;a=commitdiff_plain;h=d343552965eca40db09acf6a4c39853e6b3465ea fixed several memory leaks --- diff --git a/src/cmd_neonserv_dehalfop.c b/src/cmd_neonserv_dehalfop.c index 2253797..f995e0f 100644 --- a/src/cmd_neonserv_dehalfop.c +++ b/src/cmd_neonserv_dehalfop.c @@ -57,6 +57,7 @@ static USERLIST_CALLBACK(neonserv_cmd_dehalfop_userlist_lookup) { for(i = 0; i < cache->argc; i++) { free(cache->argv[i]); } + free(cache->argv); free(cache); } diff --git a/src/cmd_neonserv_dehalfopall.c b/src/cmd_neonserv_dehalfopall.c index 8dd8d61..1cb58d0 100644 --- a/src/cmd_neonserv_dehalfopall.c +++ b/src/cmd_neonserv_dehalfopall.c @@ -57,6 +57,7 @@ static USERLIST_CALLBACK(neonserv_cmd_dehalfopall_userlist_lookup) { for(i = 0; i < cache->argc; i++) { free(cache->argv[i]); } + free(cache->argv); free(cache); } diff --git a/src/cmd_neonserv_deop.c b/src/cmd_neonserv_deop.c index 211f5bf..20a4f44 100644 --- a/src/cmd_neonserv_deop.c +++ b/src/cmd_neonserv_deop.c @@ -57,6 +57,7 @@ static USERLIST_CALLBACK(neonserv_cmd_deop_userlist_lookup) { for(i = 0; i < cache->argc; i++) { free(cache->argv[i]); } + free(cache->argv); free(cache); } diff --git a/src/cmd_neonserv_deopall.c b/src/cmd_neonserv_deopall.c index 5279ce4..7b1cdb2 100644 --- a/src/cmd_neonserv_deopall.c +++ b/src/cmd_neonserv_deopall.c @@ -57,6 +57,7 @@ static USERLIST_CALLBACK(neonserv_cmd_deopall_userlist_lookup) { for(i = 0; i < cache->argc; i++) { free(cache->argv[i]); } + free(cache->argv); free(cache); } diff --git a/src/cmd_neonserv_search.c b/src/cmd_neonserv_search.c index a98d0e6..2cefe55 100644 --- a/src/cmd_neonserv_search.c +++ b/src/cmd_neonserv_search.c @@ -41,13 +41,9 @@ struct neonserv_cmd_search_criteria { CMD_BIND(neonserv_cmd_search) { //ok parse the criterias - struct neonserv_cmd_search_criteria *criteria = malloc(sizeof(*criteria)); - if (!criteria) { - perror("malloc() failed"); - return; - } - memset(criteria, 0, sizeof(*criteria)); - criteria->limit = 50; + struct neonserv_cmd_search_criteria criteria; + memset(&criteria, 0, sizeof(criteria)); + criteria.limit = 50; int i, show_chans = 0, positive; if(!stricmp(argv[0], "print")) { show_chans = 1; @@ -57,11 +53,11 @@ CMD_BIND(neonserv_cmd_search) { reply(getTextBot(), user, "MODCMD_LESS_PARAM_COUNT"); return; } - if(!stricmp(argv[i], "name")) criteria->name = argv[i+1]; - else if(!stricmp(argv[i], "registrar")) criteria->registrar = argv[i+1]; - else if(!stricmp(argv[i], "onchan")) criteria->onchan = argv[i+1]; - else if(!stricmp(argv[i], "unvisited")) criteria->unvisited = strToTime(user, argv[i+1]); - else if(!stricmp(argv[i], "registered")) criteria->registered = strToTime(user, argv[i+1]); + if(!stricmp(argv[i], "name")) criteria.name = argv[i+1]; + else if(!stricmp(argv[i], "registrar")) criteria.registrar = argv[i+1]; + else if(!stricmp(argv[i], "onchan")) criteria.onchan = argv[i+1]; + else if(!stricmp(argv[i], "unvisited")) criteria.unvisited = strToTime(user, argv[i+1]); + else if(!stricmp(argv[i], "registered")) criteria.registered = strToTime(user, argv[i+1]); else if(!stricmp(argv[i], "flags")) { if(argv[i+1][0] == '+') { positive = 1; @@ -73,14 +69,14 @@ CMD_BIND(neonserv_cmd_search) { positive = 1; if(!stricmp(argv[i+1], "nodelete")) { if(positive) - criteria->flags |= CMD_SEARCH_FLAG_HAS_NODELETE; + criteria.flags |= CMD_SEARCH_FLAG_HAS_NODELETE; else - criteria->flags |= CMD_SEARCH_FLAG_NOT_NODELETE; + criteria.flags |= CMD_SEARCH_FLAG_NOT_NODELETE; } else if(!stricmp(argv[i+1], "suspended")) { if(positive) - criteria->flags |= CMD_SEARCH_FLAG_HAS_SUSPENDED; + criteria.flags |= CMD_SEARCH_FLAG_HAS_SUSPENDED; else - criteria->flags |= CMD_SEARCH_FLAG_NOT_SUSPENDED; + criteria.flags |= CMD_SEARCH_FLAG_NOT_SUSPENDED; } } else if(!stricmp(argv[i], "state")) { @@ -94,23 +90,23 @@ CMD_BIND(neonserv_cmd_search) { positive = 1; if(!stricmp(argv[i+1], "joined")) { if(positive) - criteria->flags |= CMD_SEARCH_FLAG_IS_JOINED; + criteria.flags |= CMD_SEARCH_FLAG_IS_JOINED; else - criteria->flags |= CMD_SEARCH_FLAG_NOT_JOINED; + criteria.flags |= CMD_SEARCH_FLAG_NOT_JOINED; } else if(!stricmp(argv[i+1], "opped")) { if(positive) - criteria->flags |= CMD_SEARCH_FLAG_IS_OPPED; + criteria.flags |= CMD_SEARCH_FLAG_IS_OPPED; else - criteria->flags |= CMD_SEARCH_FLAG_NOT_OPPED; + criteria.flags |= CMD_SEARCH_FLAG_NOT_OPPED; } else if(!stricmp(argv[i+1], "voiced")) { if(positive) - criteria->flags |= CMD_SEARCH_FLAG_IS_VOICED; + criteria.flags |= CMD_SEARCH_FLAG_IS_VOICED; else - criteria->flags |= CMD_SEARCH_FLAG_NOT_VOICED; + criteria.flags |= CMD_SEARCH_FLAG_NOT_VOICED; } } else if(!stricmp(argv[i], "limit")) { - criteria->limit = atoi(argv[i+1]); + criteria.limit = atoi(argv[i+1]); } } int matches = 0; @@ -120,38 +116,38 @@ CMD_BIND(neonserv_cmd_search) { printf_mysql_query("SELECT `channel_name`, `user_user`, `channel_registered`, `channel_nodelete`, `suspended`, `channel_id` FROM `bot_channels` LEFT JOIN `bots` ON `bots`.`id` = `botid` LEFT JOIN `channels` ON `chanid` = `channel_id` LEFT JOIN `users` ON `channel_registrator` = `user_id` WHERE `botclass` = '%d' AND `active` = '1'", client->botid); res = mysql_use(); while ((row = mysql_fetch_row(res)) != NULL) { - if(show_chans && matches == criteria->limit) { + if(show_chans && matches == criteria.limit) { //too many break; } - if(criteria->name && match(criteria->name, row[0])) continue; - if(criteria->registrar && row[1] && match(criteria->registrar, row[1])) continue; - if(criteria->unvisited) { + if(criteria.name && match(criteria.name, row[0])) continue; + if(criteria.registrar && row[1] && match(criteria.registrar, row[1])) continue; + if(criteria.unvisited) { printf_mysql_query("SELECT `chanuser_seen` FROM `chanusers` WHERE `chanuser_cid` = '%s' ORDER BY `chanuser_seen` DESC LIMIT 1", row[5]); res2 = mysql_use(); row2 = mysql_fetch_row(res2); if(!row2) continue; - if((time(0) - atoi(row2[0])) < criteria->unvisited) continue; + if((time(0) - atoi(row2[0])) < criteria.unvisited) continue; } - if(criteria->registered && (time(0) - atoi(row[2])) < criteria->registered) continue; + if(criteria.registered && (time(0) - atoi(row[2])) < criteria.registered) continue; - if((criteria->flags & CMD_SEARCH_FLAG_HAS_NODELETE) && strcmp(row[3], "1")) continue; - if((criteria->flags & CMD_SEARCH_FLAG_NOT_NODELETE) && strcmp(row[3], "0")) continue; - if((criteria->flags & CMD_SEARCH_FLAG_HAS_SUSPENDED) && strcmp(row[4], "1")) continue; - if((criteria->flags & CMD_SEARCH_FLAG_NOT_SUSPENDED) && strcmp(row[4], "0")) continue; - if((criteria->flags & CMD_SEARCH_FLAG_STATES) || criteria->onchan) { + if((criteria.flags & CMD_SEARCH_FLAG_HAS_NODELETE) && strcmp(row[3], "1")) continue; + if((criteria.flags & CMD_SEARCH_FLAG_NOT_NODELETE) && strcmp(row[3], "0")) continue; + if((criteria.flags & CMD_SEARCH_FLAG_HAS_SUSPENDED) && strcmp(row[4], "1")) continue; + if((criteria.flags & CMD_SEARCH_FLAG_NOT_SUSPENDED) && strcmp(row[4], "0")) continue; + if((criteria.flags & CMD_SEARCH_FLAG_STATES) || criteria.onchan) { struct ChanNode *channel = getChanByName(row[0]); - if(criteria->onchan) { + if(criteria.onchan) { if(!channel) continue; struct ChanUser *chanuser = NULL; for(chanuser = getChannelUsers(channel, NULL); chanuser; chanuser = getChannelUsers(channel, chanuser)) { - if(!match(criteria->onchan, chanuser->user->nick)) break; + if(!match(criteria.onchan, chanuser->user->nick)) break; } if(!chanuser) continue; } - if((criteria->flags & CMD_SEARCH_FLAG_IS_JOINED) && !channel) continue; - if((criteria->flags & CMD_SEARCH_FLAG_NOT_JOINED) && channel) continue; - if(channel && (criteria->flags & (CMD_SEARCH_FLAG_IS_OPPED | CMD_SEARCH_FLAG_NOT_OPPED | CMD_SEARCH_FLAG_IS_VOICED | CMD_SEARCH_FLAG_NOT_VOICED))) { + if((criteria.flags & CMD_SEARCH_FLAG_IS_JOINED) && !channel) continue; + if((criteria.flags & CMD_SEARCH_FLAG_NOT_JOINED) && channel) continue; + if(channel && (criteria.flags & (CMD_SEARCH_FLAG_IS_OPPED | CMD_SEARCH_FLAG_NOT_OPPED | CMD_SEARCH_FLAG_IS_VOICED | CMD_SEARCH_FLAG_NOT_VOICED))) { int flags = 0; struct ClientSocket *bot; for(bot = getBots(SOCKET_FLAG_READY, NULL); bot; bot = getBots(SOCKET_FLAG_READY, bot)) { @@ -163,10 +159,10 @@ CMD_BIND(neonserv_cmd_search) { } } } - if((criteria->flags & CMD_SEARCH_FLAG_IS_OPPED) && !(flags & CHANUSERFLAG_OPPED)) continue; - if((criteria->flags & CMD_SEARCH_FLAG_NOT_OPPED) && (flags & CHANUSERFLAG_OPPED)) continue; - if((criteria->flags & CMD_SEARCH_FLAG_IS_VOICED) && !(flags & CHANUSERFLAG_VOICED)) continue; - if((criteria->flags & CMD_SEARCH_FLAG_NOT_VOICED) && (flags & CHANUSERFLAG_VOICED)) continue; + if((criteria.flags & CMD_SEARCH_FLAG_IS_OPPED) && !(flags & CHANUSERFLAG_OPPED)) continue; + if((criteria.flags & CMD_SEARCH_FLAG_NOT_OPPED) && (flags & CHANUSERFLAG_OPPED)) continue; + if((criteria.flags & CMD_SEARCH_FLAG_IS_VOICED) && !(flags & CHANUSERFLAG_VOICED)) continue; + if((criteria.flags & CMD_SEARCH_FLAG_NOT_VOICED) && (flags & CHANUSERFLAG_VOICED)) continue; } } matches++;