serv_imap.c: moved to new CtdlFetchMsgList() API.
authorArt Cancro <ajc@citadel.org>
Sat, 19 Aug 2023 21:34:34 +0000 (12:34 -0900)
committerArt Cancro <ajc@citadel.org>
Sat, 19 Aug 2023 21:34:34 +0000 (12:34 -0900)
This should be the last of them.  Next step is to audit all other use of cdb_free().

citadel/server/euidindex.c
citadel/server/modules/expire/serv_expire.c
citadel/server/modules/imap/serv_imap.c
citadel/server/msgbase.c
citadel/server/room_ops.c
citadel/server/user_ops.c

index 0c603617e9f47a8d0f402d64b759fe207ffb2c27..b992d6f82c8e16648e937eb311ee22c4c3952fe9 100644 (file)
@@ -188,8 +188,8 @@ void cmd_euid(char *cmdbuf) {
                                return;
                        }
                }
-                free(msglist);
        }
+       free(msglist);
 
        cprintf("%d not found\n", ERROR + MESSAGE_NOT_FOUND);
 }
index 9bf180ad01ec476b6b4256211d9d3fa1da2d4532..af53a1ed3189246876df27789f8c1972093f3128 100644 (file)
@@ -117,7 +117,7 @@ void GatherPurgeMessages(struct ctdlroom *qrbuf, void *data) {
 
        // Nothing to do if there aren't any messages
        if (num_msgs <= 0) {
-               if (msglist != NULL) free(msglist);
+               free(msglist);
                return;
        }
 
index 621d21396b8a03000eafecb2a1c3fa0d328b179b..5fc769652bbeb33746d51198fa4ae2522af66514 100644 (file)
@@ -1,6 +1,6 @@
 // IMAP server for the Citadel system
 //
-// Copyright (c) 1987-2022 by the citadel.org team
+// Copyright (c) 1987-2023 by the citadel.org team
 //
 // This program is open source software.  Use, duplication, or disclosure
 // is subject to the terms of the GNU General Public License, version 3.
@@ -26,6 +26,7 @@
 #include "../../support.h"
 #include "../../config.h"
 #include "../../user_ops.h"
+#include "../../room_ops.h"
 #include "../../database.h"
 #include "../../msgbase.h"
 #include "../../internet_addressing.h"
@@ -256,7 +257,6 @@ void imap_add_single_msgid(long msgnum, void *userdata) {
  * Set up a message ID map for the current room (folder)
  */
 void imap_load_msgids(void) {
-       struct cdbdata *cdbfr;
        citimap *Imap = IMAP;
 
        if (Imap->selected == 0) {
@@ -267,21 +267,13 @@ void imap_load_msgids(void) {
        imap_free_msgids();     /* If there was already a map, free it */
 
        /* Load the message list */
-       cdbfr = cdb_fetch(CDB_MSGLISTS, &CC->room.QRnumber, sizeof(long));
-       if (cdbfr != NULL) {
-               Imap->msgids = (long*)cdbfr->ptr;
-               Imap->num_msgs = cdbfr->len / sizeof(long);
-               Imap->num_alloc = cdbfr->len / sizeof(long);
-               cdbfr->ptr = NULL;                      // (this needs attention if we move to LMDB)
-               cdbfr->len = 0;
-               cdb_free(cdbfr);
-       }
+       Imap->num_msgs = CtdlFetchMsgList(CC->room.QRnumber, &Imap->msgids);
+       Imap->num_alloc = Imap->num_msgs;
 
        if (Imap->num_msgs) {
                Imap->flags = malloc(Imap->num_alloc * sizeof(unsigned int));
                memset(Imap->flags, 0, (Imap->num_alloc * sizeof(unsigned int)) );
        }
-
        imap_set_seen_flags(0);
 }
 
@@ -295,7 +287,6 @@ void imap_rescan_msgids(void) {
        long original_highest = 0L;
        int i, j, jstart;
        int message_still_exists;
-       struct cdbdata *cdbfr;
        long *msglist = NULL;
        int num_msgs = 0;
        int num_recent = 0;
@@ -317,17 +308,7 @@ void imap_rescan_msgids(void) {
        /* Load the *current* message list from disk, so we can compare it
         * to what we have in memory.
         */
-       cdbfr = cdb_fetch(CDB_MSGLISTS, &CC->room.QRnumber, sizeof(long));
-       if (cdbfr != NULL) {
-               msglist = (long*)cdbfr->ptr;
-               cdbfr->ptr = NULL;                      // (this needs attention if we move to LMDB)
-               num_msgs = cdbfr->len / sizeof(long);
-               cdbfr->len = 0;
-               cdb_free(cdbfr);
-       }
-       else {
-               num_msgs = 0;
-       }
+       num_msgs = CtdlFetchMsgList(CC->room.QRnumber, &msglist);
 
        /*
         * Check to see if any of the messages we know about have been expunged
@@ -396,9 +377,7 @@ void imap_rescan_msgids(void) {
                IAPrintf("* %d RECENT\r\n", num_recent);
        }
 
-       if (msglist != NULL) {
-               free(msglist);
-       }
+       free(msglist);
        Imap->last_mtime = CC->room.QRmtime;
 }
 
index daee42762e6b986a9ab19c96daa250b734243426..5e054ac86b5077f219621f95485897fad9d660db 100644 (file)
@@ -446,9 +446,7 @@ void CtdlSetSeen(long *target_msgnums, int num_target_msgnums,
        // Load the message list
        num_msgs = CtdlFetchMsgList(which_room->QRnumber, &msglist);
        if (num_msgs <= 0) {
-               if (msglist != NULL) {
-                       free(msglist);
-               }
+               free(msglist);
                return;
        }
        
@@ -653,7 +651,7 @@ int CtdlForEachMessage(int mode, long ref, char *search_string,
        // Load the message list
        num_msgs = CtdlFetchMsgList(CC->room.QRnumber, &msglist);
        if (num_msgs <= 0) {
-               if (msglist) free(msglist);
+               free(msglist);
                if (need_to_free_re) regfree(&re);
                return 0;       // No messages at all?  No further action.
        }
@@ -3299,8 +3297,7 @@ int CtdlDeleteMessages(const char *room_name,     // which room
 /*
  * GetMetaData()  -  Get the supplementary record for a message
  */
-void GetMetaData(struct MetaData *smibuf, long msgnum)
-{
+void GetMetaData(struct MetaData *smibuf, long msgnum) {
        struct cdbdata *cdbsmi;
        long TheIndex;
 
index 749bcacb9130dbe8db1da339eade82c2cdd24787..65a4106886df912a6c4d792508474055b77a5dff 100644 (file)
@@ -612,7 +612,8 @@ int CtdlFetchMsgList(long roomnum, long **msgs) {
         cdbfr = cdb_fetch(CDB_MSGLISTS, &roomnum, sizeof(long));
        if (cdbfr == NULL) {
                syslog(LOG_ERR, "room_ops: no msglist for room %ld", roomnum);
-               *msgs = NULL;
+               *msgs = malloc(sizeof(long));   // dummy buffer
+               *msgs[0] = 0;
                return (0);
        }
 
index a82014c211a39736caa90f7620a201ecac958c08..d6303ebcf165972b0a5c93ae234e7750ca9bff9b 100644 (file)
@@ -1101,9 +1101,7 @@ int InitialMailCheck() {
                        }
                }
        }
-       if (msglist != NULL)
-               free(msglist);
-
+       free(msglist);
        return(num_newmsgs);
 }