aboutsummaryrefslogtreecommitdiffstats
path: root/src/libutil/mem_pool.c
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2017-08-23 20:17:12 +0100
committerVsevolod Stakhov <vsevolod@highsecure.ru>2017-08-23 20:17:12 +0100
commit826c02dd8e560a3431b959aa0a31eb3850a46191 (patch)
treee5b631e6c569079e0c7db052b2d66ae6bacedfae /src/libutil/mem_pool.c
parentfcc439c9fd860bc6d03c81889fb5178be2aecc9b (diff)
downloadrspamd-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.c10
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;
}