From 826c02dd8e560a3431b959aa0a31eb3850a46191 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Wed, 23 Aug 2017 20:17:12 +0100 Subject: [PATCH] [Minor] Khash performs realloc, so it is unsafe to use it by value --- src/libutil/mem_pool.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/libutil/mem_pool.c b/src/libutil/mem_pool.c index db7cf298c..fc0c18e8b 100644 --- a/src/libutil/mem_pool.c +++ b/src/libutil/mem_pool.c @@ -73,7 +73,7 @@ rspamd_entry_equal (const char *k1, const char *k2) } -KHASH_INIT(mempool_entry, const gchar *, struct rspamd_mempool_entry_point, +KHASH_INIT(mempool_entry, const gchar *, struct rspamd_mempool_entry_point *, 1, rspamd_entry_hash, rspamd_entry_equal) static khash_t(mempool_entry) *mempool_entries = NULL; @@ -104,14 +104,16 @@ pool_chain_free (struct _pool_chain *chain) static inline struct rspamd_mempool_entry_point * rspamd_mempool_entry_new (const gchar *loc) { - struct rspamd_mempool_entry_point *entry; + struct rspamd_mempool_entry_point **pentry, *entry; gint r; khiter_t k; k = kh_put (mempool_entry, mempool_entries, loc, &r); if (r >= 0) { - entry = &kh_value (mempool_entries, k); + pentry = &kh_value (mempool_entries, k); + entry = g_malloc0 (sizeof (*entry)); + *pentry = entry; memset (entry, 0, sizeof (*entry)); rspamd_strlcpy (entry->src, loc, sizeof (entry->src)); #ifdef HAVE_GETPAGESIZE @@ -140,7 +142,7 @@ rspamd_mempool_get_entry (const gchar *loc) k = kh_get (mempool_entry, mempool_entries, loc); if (k != kh_end (mempool_entries)) { - elt = &kh_value (mempool_entries, k); + elt = kh_value (mempool_entries, k); return elt; } -- 2.39.5