From c50beab703e2be530864c7b2dd861a9f84dbbc88 Mon Sep 17 00:00:00 2001 From: Wilfried Goesgens Date: Sat, 14 Sep 2013 10:53:06 +0200 Subject: [PATCH] Mesages: fix copying of fields; add flush function to cleanup a messages structs members. --- citadel/modules/rssclient/serv_rssclient.c | 2 +- citadel/msgbase.c | 14 +++++++++++++- citadel/msgbase.h | 1 + 3 files changed, 15 insertions(+), 2 deletions(-) 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); -- 2.30.2