aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2019-02-27 14:26:36 +0000
committerVsevolod Stakhov <vsevolod@highsecure.ru>2019-02-27 14:26:36 +0000
commit823095cd9d08e266aaa1067418a457572a794374 (patch)
tree5aecb793deca3765c75424de6789d694edc1c896 /src
parent2c316e86a137b0622863c18b2b6e9f09c693fbc3 (diff)
downloadrspamd-823095cd9d08e266aaa1067418a457572a794374.tar.gz
rspamd-823095cd9d08e266aaa1067418a457572a794374.zip
[Minor] Exclude duplicate entries
Diffstat (limited to 'src')
-rw-r--r--src/libutil/map_helpers.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/src/libutil/map_helpers.c b/src/libutil/map_helpers.c
index ec4d95183..964e4d98c 100644
--- a/src/libutil/map_helpers.c
+++ b/src/libutil/map_helpers.c
@@ -504,17 +504,25 @@ rspamd_map_helper_insert_hash (gpointer st, gconstpointer key, gconstpointer val
gsize vlen;
gint r;
- vlen = strlen (value);
- val = rspamd_mempool_alloc0 (ht->pool, sizeof (*val) +
- vlen + 1);
- memcpy (val->value, value, vlen);
-
k = kh_get (rspamd_map_hash, ht->htb, key);
+ vlen = strlen (value);
if (k == kh_end (ht->htb)) {
nk = rspamd_mempool_strdup (ht->pool, key);
k = kh_put (rspamd_map_hash, ht->htb, nk, &r);
}
+ else {
+ val = kh_value (ht->htb, k);
+
+ if (strcmp (value, val->value) == 0) {
+ /* Same element, skip */
+ return;
+ }
+ }
+
+ /* Null termination due to alloc0 */
+ val = rspamd_mempool_alloc0 (ht->pool, sizeof (*val) + vlen + 1);
+ memcpy (val->value, value, vlen);
nk = kh_key (ht->htb, k);
val->key = nk;