From: Vsevolod Stakhov Date: Wed, 23 Aug 2017 19:17:12 +0000 (+0100) Subject: [Minor] Khash performs realloc, so it is unsafe to use it by value X-Git-Tag: 1.7.0~706 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=826c02dd8e560a3431b959aa0a31eb3850a46191;p=thirdparty%2Frspamd.git [Minor] Khash performs realloc, so it is unsafe to use it by value --- diff --git a/src/libutil/mem_pool.c b/src/libutil/mem_pool.c index db7cf298c9..fc0c18e8bf 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; }