fix possible leaks around 'W'; the funambol code abuses it.
authorWilfried Goesgens <dothebart@citadel.org>
Mon, 19 Sep 2011 21:19:12 +0000 (21:19 +0000)
committerWilfried Goesgens <dothebart@citadel.org>
Mon, 19 Sep 2011 21:19:12 +0000 (21:19 +0000)
citadel/msgbase.c

index 9d73668436c3df6329b3d076e534bb51b955c433..a58093bbe38e6197b66f4dd0f2b2ca473eb2d9ce 100644 (file)
@@ -3186,8 +3186,6 @@ long CtdlSubmitMsg(struct CtdlMessage *msg,       /* message to save */
                        syslog(LOG_DEBUG, "Delivering private local mail to <%s>\n",
                               recipient);
                        if (CtdlGetUser(&userbuf, recipient) == 0) {
-                               // Add a flag so the Funambol module knows its mail
-                               msg->cm_fields['W'] = strdup(recipient);
                                CtdlMailboxName(actual_rm, sizeof actual_rm, &userbuf, MAILROOM);
                                CtdlSaveMsgPointerInRoom(actual_rm, newmsgid, 0, msg);
                                CtdlBumpNewMailCounter(userbuf.usernum);
@@ -3650,10 +3648,10 @@ struct CtdlMessage *CtdlMakeMessage(
                msg->cm_fields['E'] = strdup(supplied_euid);
        }
 
-       if (references != NULL) {
-               if (!IsEmptyStr(references)) {
-                       msg->cm_fields['W'] = strdup(references);
-               }
+       if ((references != NULL) && (!IsEmptyStr(references))) {
+               if (msg->cm_fields['W'] != NULL)
+                       free(msg->cm_fields['W']);
+               msg->cm_fields['W'] = strdup(references);
        }
 
        if (preformatted_text != NULL) {