From d421f4bff6c874d09df03ae993aa8f7e1a9953c1 Mon Sep 17 00:00:00 2001 From: djcb Date: Tue, 3 Apr 2012 19:36:43 +0300 Subject: [PATCH] * small leak fixes --- src/mu-msg-sexp.c | 24 ++++++++++++++---------- src/mu-threader.c | 15 ++++++++++++--- 2 files changed, 26 insertions(+), 13 deletions(-) diff --git a/src/mu-msg-sexp.c b/src/mu-msg-sexp.c index 939c7f4b..12436818 100644 --- a/src/mu-msg-sexp.c +++ b/src/mu-msg-sexp.c @@ -201,7 +201,8 @@ static void each_part (MuMsg *msg, MuMsgPart *part, gchar **parts) { const char *fname; - char *name; + char *name, *tmp; + if (!mu_msg_part_looks_like_attachment (part, TRUE)) return; @@ -215,12 +216,15 @@ each_part (MuMsg *msg, MuMsgPart *part, gchar **parts) else name = g_strdup_printf ("\"part-%d\"", part->index); - *parts = g_strdup_printf - ("%s(:index %d :name %s :mime-type \"%s/%s\" :size %u)", - *parts ? *parts : "", part->index, name, - part->type ? part->type : "application", - part->subtype ? part->subtype : "octet-stream", - (unsigned)part->size); + tmp = g_strdup_printf + ("%s(:index %d :name %s :mime-type \"%s/%s\" :size %u)", + *parts ? *parts : "", part->index, name, + part->type ? part->type : "application", + part->subtype ? part->subtype : "octet-stream", + (unsigned)part->size); + + g_free (*parts); + *parts = tmp; } @@ -233,10 +237,10 @@ append_sexp_attachments (GString *gstr, MuMsg *msg) mu_msg_part_foreach (msg, FALSE, (MuMsgPartForeachFunc)each_part, &parts); - if (parts) + if (parts) { g_string_append_printf (gstr, "\t:attachments (%s)\n", parts); - - g_free (parts); + g_free (parts); + } } diff --git a/src/mu-threader.c b/src/mu-threader.c index 997c6720..c2706d25 100644 --- a/src/mu-threader.c +++ b/src/mu-threader.c @@ -17,7 +17,7 @@ ** Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ** */ -#include /* for log, ceil */ +#include /* for log, ceil */ #include /* for memset */ #include "mu-threader.h" @@ -173,18 +173,27 @@ find_or_create (GHashTable *id_table, MuMsg *msg, guint docid) c->docid = docid; return c; } else { + char fakeid[16]; + static unsigned id = 0; /* c && c->msg */ /* special case, not in the JWZ algorithm: the * container exists already and has a message; this * means that we are seeing *another message* with a * message-id we already saw... create this message, * and mark it as a duplicate, and a child of the one - * we saw before; use its path as a fake message-id*/ + * we saw before; use its path as a fake message-id + * */ MuContainer *c2; c2 = mu_container_new (msg, docid, ""); c2->flags = MU_CONTAINER_FLAG_DUP; c = mu_container_append_children (c, c2); - /* don't add it to the id_table */ + + /* add the container to the id-table with a + * fake-id so it will be freed when the + * id_table is destroyed */ + snprintf (fakeid, sizeof(fakeid), "%x", ++id); + g_hash_table_insert (id_table, (gpointer)fakeid, c); + return NULL; /* don't process this message further */ } } else { /* Else: Create a new MuContainer object holding