aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/libserver/dkim.c26
1 files changed, 17 insertions, 9 deletions
diff --git a/src/libserver/dkim.c b/src/libserver/dkim.c
index 2a2e7a7a7..b0bab01d9 100644
--- a/src/libserver/dkim.c
+++ b/src/libserver/dkim.c
@@ -421,6 +421,7 @@ rspamd_dkim_parse_hdrlist_common (struct rspamd_dkim_common_ctx *ctx,
gboolean from_found = FALSE;
guint count = 0;
struct rspamd_dkim_header *new;
+ gpointer found;
GHashTable *htb;
p = param;
@@ -444,30 +445,37 @@ rspamd_dkim_parse_hdrlist_common (struct rspamd_dkim_common_ctx *ctx,
while (p <= end) {
if ((p == end || *p == ':') && p - c > 0) {
+
h = rspamd_mempool_alloc (ctx->pool, p - c + 1);
rspamd_strlcpy (h, c, p - c + 1);
- g_strstrip (h);
- new = rspamd_mempool_alloc (ctx->pool,
- sizeof (struct rspamd_dkim_header));
- new->name = h;
- new->count = 0;
+ g_strstrip (h);
/* Check mandatory from */
if (!from_found && g_ascii_strcasecmp (h, "from") == 0) {
from_found = TRUE;
}
+ new = rspamd_mempool_alloc (ctx->pool,
+ sizeof (struct rspamd_dkim_header));
+ new->name = h;
+ new->count = 0;
+
g_ptr_array_add (ctx->hlist, new);
- if (g_hash_table_lookup (htb, h) != NULL) {
- new->count++;
+ if ((found = g_hash_table_lookup (htb, h)) != NULL) {
+ count = GPOINTER_TO_UINT (found);
+ new->count = count;
+ count ++;
+ g_hash_table_insert (htb, h, GUINT_TO_POINTER (count));
}
else {
- /* Insert new header to the list */
- g_hash_table_insert (htb, (gpointer)new->name, new);
+ /* Insert new header order to the list */
+ count = new->count + 1;
}
+ g_hash_table_insert (htb, h, GUINT_TO_POINTER (count));
+
c = p + 1;
p++;
}