Changed that, of course. It was causing a double free.
-struct CtdlMessage *convert_internet_message_buf(StrBuf **rfc822)
-{
+struct CtdlMessage *convert_internet_message_buf(StrBuf **rfc822) {
struct CtdlMessage *msg;
const char *pos, *beg, *end, *totalend;
int done, alldone = 0;
struct CtdlMessage *msg;
const char *pos, *beg, *end, *totalend;
int done, alldone = 0;
- while ((end < totalend) &&
- (end == beg) &&
- (done == 0) )
- {
+ while ((end < totalend) && (end == beg) && (done == 0) ) {
- if ( (*pos=='\n') && ((*(pos+1))!=0x20) && ((*(pos+1))!=0x09) )
- {
+ if ( (*pos=='\n') && ((*(pos+1))!=0x20) && ((*(pos+1))!=0x09) ) {
end = pos;
}
/* done with headers? */
end = pos;
}
/* done with headers? */
- if ((*pos=='\n') &&
- ( (*(pos+1)=='\n') ||
- (*(pos+1)=='\r')) )
- {
+ if ((*pos=='\n') && ( (*(pos+1)=='\n') || (*(pos+1)=='\r')) ) {
- if (pos >= (totalend - 1) )
- {
+ if (pos >= (totalend - 1) ) {
free(MsgText);
CM_SetAsFieldSB(history_msg, eMesageText, &NewMsgText);
}
free(MsgText);
CM_SetAsFieldSB(history_msg, eMesageText, &NewMsgText);
}
CM_SetAsField(history_msg, eMesageText, &MsgText, MsgTextLen);
}
CM_SetAsField(history_msg, eMesageText, &MsgText, MsgTextLen);
}
+// This is like CM_SetField() except the caller is transferring ownership of the supplied memory to the message
void CM_SetAsField(struct CtdlMessage *Msg, eMsgField which, char **buf, long length) {
if (Msg->cm_fields[which] != NULL) {
free (Msg->cm_fields[which]);
void CM_SetAsField(struct CtdlMessage *Msg, eMsgField which, char **buf, long length) {
if (Msg->cm_fields[which] != NULL) {
free (Msg->cm_fields[which]);
if ( (CM_IsEmpty(ret, eMesageText)) && (with_body) ) {
dmsgtext = cdb_fetch(CDB_BIGMSGS, &msgnum, sizeof(long));
if (dmsgtext.ptr != NULL) {
if ( (CM_IsEmpty(ret, eMesageText)) && (with_body) ) {
dmsgtext = cdb_fetch(CDB_BIGMSGS, &msgnum, sizeof(long));
if (dmsgtext.ptr != NULL) {
- CM_SetAsField(ret, eMesageText, &dmsgtext.ptr, dmsgtext.len - 1);
+ CM_SetField(ret, eMesageText, dmsgtext.ptr);
}
}
if (CM_IsEmpty(ret, eMesageText)) {
}
}
if (CM_IsEmpty(ret, eMesageText)) {
serv_gets(buf);
if (buf[0] == '4') {
serv_gets(buf);
if (buf[0] == '4') {
- bigness = random() % 10;
+ bigness = random() % 500;
strcpy(buf, "");
for (i=0; i<bigness; ++i) {
strcat(buf, words[random() % nwords]);
strcpy(buf, "");
for (i=0; i<bigness; ++i) {
strcat(buf, words[random() % nwords]);