]> source.dussan.org Git - rspamd.git/commitdiff
* Fix memory leak when ref'ing message mime part without unrefing it
authorVsevolod Stakhov <vsevolod@rambler-co.ru>
Fri, 8 May 2009 12:07:35 +0000 (16:07 +0400)
committerVsevolod Stakhov <vsevolod@rambler-co.ru>
Fri, 8 May 2009 12:07:35 +0000 (16:07 +0400)
src/expressions.c
src/message.c

index c0c7919073989ec88cbc1c23c5923756f16e0652..c7b88adb9560782634e4d676008cd3a69560be70 100644 (file)
@@ -1507,14 +1507,17 @@ rspamd_compare_transfer_encoding (struct worker_task *task, GList *args)
        }
 
        part = g_mime_message_get_mime_part (task->message);
-       if (part && GMIME_IS_PART (part)) {
-               part_enc = g_mime_part_get_encoding (GMIME_PART (part));
-               g_object_unref (part);
+       if (part) {
+               if (GMIME_IS_PART (part)) {
+                       part_enc = g_mime_part_get_encoding (GMIME_PART (part));
                
-               msg_debug ("rspamd_compare_transfer_encoding: got encoding in part: %d and compare with %d",
-                               (int)part_enc, (int)enc_req);
+                       msg_debug ("rspamd_compare_transfer_encoding: got encoding in part: %d and compare with %d",
+                                       (int)part_enc, (int)enc_req);
+                       g_object_unref (part);
 
-               return part_enc == enc_req;
+                       return part_enc == enc_req;
+               }
+               g_object_unref (part);
        }
 
        return FALSE;
index f2add5b47d8ba948cc17be523eb9f4f9469ef6ab..33cf047329f431593335659437120127980fb62b 100644 (file)
@@ -397,6 +397,15 @@ mime_foreach_callback (GMimeObject *part, gpointer user_data)
        }
 }
 
+static void
+destroy_message (void *pointer)
+{
+       GMimeMessage *msg = pointer;
+
+       msg_debug ("destroy_message: freeing pointer %p", msg);
+       g_object_unref (msg);
+}
+
 int
 process_message (struct worker_task *task)
 {
@@ -429,7 +438,7 @@ process_message (struct worker_task *task)
        }
        
        task->message = message;
-       memory_pool_add_destructor (task->task_pool, (pool_destruct_func)g_object_unref, task->message);
+       memory_pool_add_destructor (task->task_pool, (pool_destruct_func)destroy_message, task->message);
 
 #ifdef GMIME24
        g_mime_message_foreach (message, mime_foreach_callback, task);