From 420c5434bcec25ccf3d87a90fb81410b273b0afe Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Mon, 18 Feb 2019 17:47:33 +0000 Subject: [PATCH] [Minor] Add more safety when resolving deps --- src/libserver/rspamd_symcache.c | 39 +++++++++++++++++++-------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/src/libserver/rspamd_symcache.c b/src/libserver/rspamd_symcache.c index d02638add8..e3db8d6efb 100644 --- a/src/libserver/rspamd_symcache.c +++ b/src/libserver/rspamd_symcache.c @@ -529,24 +529,31 @@ rspamd_symcache_post_init (struct rspamd_symcache *cache) dit = rspamd_symcache_find_filter (cache, dep->sym); if (dit != NULL) { - if (dit->id == i) { - msg_err_cache ("cannot add dependency on self: %s -> %s " - "(resolved to %s)", - it->symbol, dep->sym, dit->symbol); + if (!dit->is_filter) { + msg_err_cache ("cannot depend on non filter symbol " + "(%s wants to add dependency on %s)", + dep->sym, dit->symbol); } else { - rdep = rspamd_mempool_alloc (cache->static_pool, - sizeof (*rdep)); - - rdep->sym = dep->sym; - rdep->item = it; - rdep->id = i; - g_ptr_array_add (dit->rdeps, rdep); - dep->item = dit; - dep->id = dit->id; - - msg_debug_cache ("add dependency from %d on %d", it->id, - dit->id); + if (dit->id == i) { + msg_err_cache ("cannot add dependency on self: %s -> %s " + "(resolved to %s)", + it->symbol, dep->sym, dit->symbol); + } else { + rdep = rspamd_mempool_alloc (cache->static_pool, + sizeof (*rdep)); + + rdep->sym = dep->sym; + rdep->item = it; + rdep->id = i; + g_assert (dit->rdeps != NULL); + g_ptr_array_add (dit->rdeps, rdep); + dep->item = dit; + dep->id = dit->id; + + msg_debug_cache ("add dependency from %d on %d", it->id, + dit->id); + } } } else { -- 2.47.3