fixed several memory leaks
authorpk910 <philipp@zoelle1.de>
Thu, 2 Feb 2012 19:42:19 +0000 (20:42 +0100)
committerpk910 <philipp@zoelle1.de>
Thu, 2 Feb 2012 19:44:09 +0000 (20:44 +0100)
src/cmd_neonserv_dehalfop.c
src/cmd_neonserv_dehalfopall.c
src/cmd_neonserv_deop.c
src/cmd_neonserv_deopall.c
src/cmd_neonserv_search.c

index 2253797403dfe76adaffc70058e9a82357a7182d..f995e0f767e31fa2cd19f730768a806727f7070e 100644 (file)
@@ -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);
 }
 
index 8dd8d619d98a8ccaf6ee60bfc3494d447fe924b7..1cb58d03a1d6fb675b08db6c71089d8f97542e3a 100644 (file)
@@ -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);
 }
 
index 211f5bf80817c5e8fc1c60e56b720a9090de4f7a..20a4f44ff717d21dc1cdb94c829ff3eaf0cbf79d 100644 (file)
@@ -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);
 }
 
index 5279ce42ff0c903d74111f4b11005180abbe0f74..7b1cdb23ba1d6b0753c8188e363ed6c75e15eac5 100644 (file)
@@ -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);
 }
 
index a98d0e6d53bddbccde144270c410cf882648fe31..2cefe55104b1e0c814cb4a3321527d1bb18d8ade 100644 (file)
@@ -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++;