diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2017-08-23 20:17:12 +0100 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2017-08-23 20:17:12 +0100 |
commit | 826c02dd8e560a3431b959aa0a31eb3850a46191 (patch) | |
tree | e5b631e6c569079e0c7db052b2d66ae6bacedfae /src/libutil/mem_pool.c | |
parent | fcc439c9fd860bc6d03c81889fb5178be2aecc9b (diff) | |
download | rspamd-826c02dd8e560a3431b959aa0a31eb3850a46191.tar.gz rspamd-826c02dd8e560a3431b959aa0a31eb3850a46191.zip |
[Minor] Khash performs realloc, so it is unsafe to use it by value
Diffstat (limited to 'src/libutil/mem_pool.c')
-rw-r--r-- | src/libutil/mem_pool.c | 10 |
1 files 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; } |