]> source.dussan.org Git - rspamd.git/commitdiff
[CritFix] Plug memory leak in headers getting code
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Fri, 22 Apr 2016 12:34:42 +0000 (13:34 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Fri, 22 Apr 2016 12:34:42 +0000 (13:34 +0100)
src/libmime/message.c
src/libmime/message.h

index 1f218e8b7ce796cb8ebef170c45b946f5824287e..fb916abfe6c0cedf46e793553264f16ab20735e8 100644 (file)
@@ -1962,6 +1962,9 @@ rspamd_message_get_header_array (struct rspamd_task *task,
                g_ptr_array_add (ret, cur);
        }
 
+       rspamd_mempool_add_destructor (task->task_pool,
+                               (rspamd_mempool_destruct_t)rspamd_ptr_array_free_hard, ret);
+
        return ret;
 }
 
@@ -1988,6 +1991,10 @@ rspamd_message_get_mime_header_array (struct rspamd_task *task,
                }
        }
 
+       if (nelems == 0) {
+               return NULL;
+       }
+
        ret = g_ptr_array_sized_new (nelems);
 
        for (i = 0; i < task->parts->len; i ++) {
@@ -2005,5 +2012,8 @@ rspamd_message_get_mime_header_array (struct rspamd_task *task,
                }
        }
 
+       rspamd_mempool_add_destructor (task->task_pool,
+               (rspamd_mempool_destruct_t)rspamd_ptr_array_free_hard, ret);
+
        return ret;
 }
index 367f0000c986263bb70ff3d72af0473b67bce97f..4f8f27b0b6069b0dcdf4acb70e1bfe86e677938e 100644 (file)
@@ -78,7 +78,7 @@ struct raw_header {
  */
 gboolean rspamd_message_parse (struct rspamd_task *task);
 
-/*
+/**
  * Get a list of header's values with specified header's name using raw headers
  * @param task worker task structure
  * @param field header's name
@@ -89,12 +89,26 @@ GList * rspamd_message_get_header (struct rspamd_task *task,
        const gchar *field,
        gboolean strong);
 
+/**
+ * Get an array of header's values with specified header's name using raw headers
+ * @param task worker task structure
+ * @param field header's name
+ * @param strong if this flag is TRUE header's name is case sensitive, otherwise it is not
+ * @return An array of header's values or NULL. It is NOT permitted to free array or values.
+ */
 GPtrArray *rspamd_message_get_header_array (struct rspamd_task *task,
                const gchar *field,
                gboolean strong);
-
+/**
+ * Get an array of mime parts header's values with specified header's name using raw headers
+ * @param task worker task structure
+ * @param field header's name
+ * @param strong if this flag is TRUE header's name is case sensitive, otherwise it is not
+ * @return An array of header's values or NULL. It is NOT permitted to free array or values.
+ */
 GPtrArray *rspamd_message_get_mime_header_array (struct rspamd_task *task,
                const gchar *field,
                gboolean strong);
 
+
 #endif