MSG: the database returns the buffer size, not the stringlength.
[citadel.git] / citadel / msgbase.c
index 1fff6dc474d891ef3a838937d1d109f877a3f87f..21c1aabb41bb16ff61581832b76673965439f7c0 100644 (file)
@@ -1165,7 +1165,7 @@ struct CtdlMessage *CtdlFetchMessage(long msgnum, int with_body)
        if ( (CM_IsEmpty(ret, eMesageText)) && (with_body) ) {
                dmsgtext = cdb_fetch(CDB_BIGMSGS, &msgnum, sizeof(long));
                if (dmsgtext != NULL) {
-                       CM_SetAsField(ret, eMesageText, &dmsgtext->ptr, dmsgtext->len);
+                       CM_SetAsField(ret, eMesageText, &dmsgtext->ptr, dmsgtext->len - 1);
                        cdb_free(dmsgtext);
                }
        }
@@ -3436,6 +3436,7 @@ struct CtdlMessage *CtdlMakeMessageLen(
        }
        StrBufRFC2047encode(&FakeEncAuthor, FakeAuthor);
        CM_SetAsFieldSB(msg, eAuthor, &FakeEncAuthor);
+       FreeStrBuf(&FakeAuthor);
 
        if (CCC->room.QRflags & QR_MAILBOX) {           /* room */
                CM_SetField(msg, eOriginalRoom, &CCC->room.QRname[11], strlen(&CCC->room.QRname[11]));
@@ -3496,9 +3497,10 @@ struct CtdlMessage *CtdlMakeMessageLen(
                CM_SetField(msg, eMesageText, preformatted_text, textlen);
        }
        else {
-               preformatted_text = CtdlReadMessageBody(HKEY("000"), config.c_maxmsglen, NULL, 0, 0);
-               if (preformatted_text != NULL) {
-                       CM_SetField(msg, eMesageText, preformatted_text, strlen(preformatted_text));
+               StrBuf *MsgBody;
+               MsgBody = CtdlReadMessageBodyBuf(HKEY("000"), config.c_maxmsglen, NULL, 0, 0);
+               if (MsgBody != NULL) {
+                       CM_SetAsFieldSB(msg, eMesageText, &MsgBody);
                }
        }