]> jfr.im git - irc/quakenet/newserv.git/commitdiff
Fix a lot of memory leaks in the async pqsql code.
authorChris Porter <redacted>
Sun, 9 Mar 2008 01:09:32 +0000 (01:09 +0000)
committerChris Porter <redacted>
Sun, 9 Mar 2008 01:09:32 +0000 (01:09 +0000)
chanserv/authcmds/authhistory.c
chanserv/chancmds/chanlevhistory.c
chanserv/chancmds/rollbackchan.c
chanserv/chanservstdcmds.c
chanserv/database/chanservdb.c
chanserv/usercmds/accounthistory.c
chanserv/usercmds/rollbackaccount.c

index 157255f5646a738d392b900c42ee3e3142e084af..cd21a222c8dc23f0aaf88c0ac2f9c4246b3c0783 100644 (file)
@@ -23,7 +23,6 @@ struct authhistoryinfo {
   unsigned int userID;
 };
 
-/* @todo: MEMORY LEAKS */
 void csdb_doauthhistory_real(PGconn *dbconn, void *arg) {
   struct authhistoryinfo *ahi=(struct authhistoryinfo*)arg;
   nick *np=getnickbynumeric(ahi->numeric);
@@ -39,11 +38,14 @@ void csdb_doauthhistory_real(PGconn *dbconn, void *arg) {
 
   if (PQresultStatus(pgres) != PGRES_TUPLES_OK) {
     Error("chanserv", ERR_ERROR, "Error loading auth history data.");
+    free(ahi);
     return;
   }
 
   if (PQnfields(pgres) != 7) {
     Error("chanserv", ERR_ERROR, "Auth history data format error.");
+    PQclear(pgres);
+    free(ahi);
     return;
   }
 
index 9b331d2f7656ed1bfe8997fef9e9153dc9c0d1b5..1f28ab3d7e6da9ed138a30548760a7aff93941ea 100644 (file)
@@ -23,7 +23,6 @@
 #include <string.h>
 #include <stdio.h>
 
-/* @todo: leaks */
 void csdb_dochanlevhistory_real(PGconn *dbconn, void *arg) {
   nick *np=getnickbynumeric((unsigned long)arg);
   reguser *rup, *crup1, *crup2;
@@ -44,6 +43,7 @@ void csdb_dochanlevhistory_real(PGconn *dbconn, void *arg) {
 
   if (PQnfields(pgres) != 7) {
     Error("chanserv", ERR_ERROR, "Chanlev history data format error.");
+    PQclear(pgres);
     return;
   }
   num=PQntuples(pgres);
index de0c88eb2c58cde3c8b7e60652a8fe6719b8d834..3452cbd7e4783377f83873f061cf9a51a22232d6 100644 (file)
@@ -23,7 +23,6 @@
 #include <string.h>
 #include <stdio.h>
 
-/* @todo: MEMORY LEAKS */
 void csc_dorollbackchan_real(PGconn *dbconn, void *arg) {
   nick *np=getnickbynumeric((unsigned long)arg);
   reguser *rup, *crup1, *crup2;
@@ -46,6 +45,7 @@ void csc_dorollbackchan_real(PGconn *dbconn, void *arg) {
 
   if (PQnfields(pgres) != 7) {
     Error("chanserv", ERR_ERROR, "Chanlev history data format error.");
+    PQclear(pgres);
     return;
   }
 
index 7f5b755302ec6deeed7e5c79a993d782ff24b984..5f712920c2e28b09f9ff8c3ec5bbd6fffe3bd0e4 100644 (file)
@@ -198,7 +198,6 @@ void csdb_dohelp(nick *np, Command *cmd) {
                  "SELECT languageID, fullinfo from help where lower(command)=lower('%s')",cmd->command->content);
 }
 
-/* @todo: leaks */
 void csdb_dohelp_real(PGconn *dbconn, void *arg) {
   struct helpinfo *hip=arg;
   nick *np=getnickbynumeric(hip->numeric);
@@ -211,11 +210,16 @@ void csdb_dohelp_real(PGconn *dbconn, void *arg) {
 
   if (PQresultStatus(pgres) != PGRES_TUPLES_OK) {
     Error("chanserv",ERR_ERROR,"Error loading help text.");
+    freesstring(hip->commandname);
+    free(hip);
     return; 
   }
 
   if (PQnfields(pgres)!=2) {
     Error("chanserv",ERR_ERROR,"Help text format error.");
+    PQclear(pgres);
+    freesstring(hip->commandname);
+    free(hip);
     return;
   }
   
index 659d627605b88bbd334653913efcfb3a5a6c77fe..c9c5d11125b2a3de8c318c1ff67a29d52ba5e6af 100644 (file)
@@ -730,7 +730,6 @@ void loadcommandsummary(Command *cmd) {
                  "SELECT languageID,summary from help where lower(command) = lower('%s')",cmd->command->content);
 }
 
-/* @todo: leaks */
 void loadcommandsummary_real(PGconn *dbconn, void *arg) {
   int i,j,num;
   PGresult *pgres;
@@ -753,6 +752,7 @@ void loadcommandsummary_real(PGconn *dbconn, void *arg) {
 
   if (PQnfields(pgres)!=2) {
     Error("chanserv",ERR_ERROR,"Command summary format error.");
+    PQclear(pgres);
     return;
   }
 
index 25946122fb61522923ea503497e2d8998716b415..501ac16636882177640e8495a1031d92437a6107 100644 (file)
@@ -17,7 +17,6 @@
 #include <stdio.h>
 #include <string.h>
 
-/* @todo: leak */
 void csdb_doaccounthistory_real(PGconn *dbconn, void *arg) {
   nick *np=getnickbynumeric((unsigned long)arg);
   reguser *rup;
@@ -38,6 +37,7 @@ void csdb_doaccounthistory_real(PGconn *dbconn, void *arg) {
 
   if (PQnfields(pgres) != 7) {
     Error("chanserv", ERR_ERROR, "Account history data format error.");
+    PQclear(pgres);
     return;
   }
 
index 18285bdab720318c957cd9c2d5854502c6b995e7..2d4b372eec0be7fbcbfb5c66cf197a075c708e44 100644 (file)
@@ -17,7 +17,6 @@
 #include <stdio.h>
 #include <string.h>
 
-/* @todo: leaks */
 void csdb_dorollbackaccount_real(PGconn *dbconn, void *arg) {
   nick *np=getnickbynumeric((unsigned long)arg);
   reguser *rup;
@@ -36,6 +35,7 @@ void csdb_dorollbackaccount_real(PGconn *dbconn, void *arg) {
 
   if (PQnfields(pgres) != 7) {
     Error("chanserv", ERR_ERROR, "Account rollback data format error.");
+    PQclear(pgres);
     return;
   }