From: Wilfried Goesgens Date: Sat, 14 Sep 2013 08:53:06 +0000 (+0200) Subject: Mesages: fix copying of fields; add flush function to cleanup a messages structs... X-Git-Tag: v9.01~264 X-Git-Url: https://code.citadel.org/?p=citadel.git;a=commitdiff_plain;h=c50beab703e2be530864c7b2dd861a9f84dbbc88 Mesages: fix copying of fields; add flush function to cleanup a messages structs members. --- diff --git a/citadel/modules/rssclient/serv_rssclient.c b/citadel/modules/rssclient/serv_rssclient.c index 701f9717b..f774fa3f5 100644 --- a/citadel/modules/rssclient/serv_rssclient.c +++ b/citadel/modules/rssclient/serv_rssclient.c @@ -290,7 +290,7 @@ int rss_format_item(AsyncIO *IO, networker_save_message *SaveMsg) return 0; } - memset(&SaveMsg->Msg, 0, sizeof (struct CtdlMessage)); + CM_Flush(&SaveMsg->Msg); if (SaveMsg->author_or_creator != NULL) { diff --git a/citadel/msgbase.c b/citadel/msgbase.c index 03ef35df6..b09850a4d 100644 --- a/citadel/msgbase.c +++ b/citadel/msgbase.c @@ -193,6 +193,18 @@ void CM_FlushField(struct CtdlMessage *Msg, eMsgField which) free (Msg->cm_fields[which]); Msg->cm_fields[which] = NULL; } +void CM_Flush(struct CtdlMessage *Msg) +{ + int i; + + if (CM_IsValidMsg(Msg) == 0) + return; + + for (i = 0; i < 256; ++i) + { + CM_FlushField(Msg, i); + } +} void CM_CopyField(struct CtdlMessage *Msg, eMsgField WhichToPutTo, eMsgField WhichtToCopy) { @@ -204,7 +216,7 @@ void CM_CopyField(struct CtdlMessage *Msg, eMsgField WhichToPutTo, eMsgField Whi { len = strlen(Msg->cm_fields[WhichtToCopy]); Msg->cm_fields[WhichToPutTo] = malloc(len + 1); - memcpy(Msg->cm_fields[WhichToPutTo], Msg->cm_fields[WhichToPutTo], len); + memcpy(Msg->cm_fields[WhichToPutTo], Msg->cm_fields[WhichtToCopy], len); Msg->cm_fields[WhichToPutTo][len] = '\0'; } else diff --git a/citadel/msgbase.h b/citadel/msgbase.h index 59ee421e0..7780d69fc 100644 --- a/citadel/msgbase.h +++ b/citadel/msgbase.h @@ -135,6 +135,7 @@ void CM_SetFieldLONG (struct CtdlMessage *Msg, eMsgField which, long lvalue); void CM_CopyField (struct CtdlMessage *Msg, eMsgField WhichToPutTo, eMsgField WhichtToCopy); void CM_CutFieldAt (struct CtdlMessage *Msg, eMsgField WhichToCut, long maxlen); void CM_FlushField (struct CtdlMessage *Msg, eMsgField which); +void CM_Flush (struct CtdlMessage *Msg); void CM_SetAsField (struct CtdlMessage *Msg, eMsgField which, char **buf, long length); void CM_SetAsFieldSB (struct CtdlMessage *Msg, eMsgField which, StrBuf **buf); void CM_GetAsField (struct CtdlMessage *Msg, eMsgField which, char **ret, long *retlen);