aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2019-09-30 12:45:39 +0100
committerVsevolod Stakhov <vsevolod@highsecure.ru>2019-09-30 12:45:39 +0100
commit1b39b28f6796c2a849af88a0cddb62210c9d7307 (patch)
treef35a217e1612169b8ce6d2e1d944b1b8eaef0533
parentd8e02ef4120e5301f96595a4a4f4de533e0d2f72 (diff)
downloadrspamd-1b39b28f6796c2a849af88a0cddb62210c9d7307.tar.gz
rspamd-1b39b28f6796c2a849af88a0cddb62210c9d7307.zip
[Fix] Fix registry leak in case of DNS errors
-rw-r--r--src/libserver/dns.c2
-rw-r--r--src/lua/lua_dns_resolver.c11
2 files changed, 12 insertions, 1 deletions
diff --git a/src/libserver/dns.c b/src/libserver/dns.c
index 08454c656..a6a109b1c 100644
--- a/src/libserver/dns.c
+++ b/src/libserver/dns.c
@@ -208,6 +208,8 @@ make_dns_request_task_common (struct rspamd_task *task,
if (!forced && task->dns_requests >= task->cfg->dns_max_requests) {
msg_info_task ("stop resolving on reaching %ud requests",
task->dns_requests);
+
+ return FALSE;
}
return TRUE;
diff --git a/src/lua/lua_dns_resolver.c b/src/lua/lua_dns_resolver.c
index 5478ab65a..9c57a2c7e 100644
--- a/src/lua/lua_dns_resolver.c
+++ b/src/lua/lua_dns_resolver.c
@@ -486,7 +486,11 @@ lua_dns_resolver_resolve_common (lua_State *L,
lua_pushboolean (L, TRUE);
}
else {
- lua_pushnil (L);
+ if (item) {
+ rspamd_symcache_item_async_dec_check (task, item, M);
+ }
+
+ goto err;
}
if (item) {
@@ -506,6 +510,11 @@ err:
g_free (cbdata->user_str);
}
+ /* Callback is not called in this case */
+ if (cbdata->cbref != -1) {
+ luaL_unref (L, LUA_REGISTRYINDEX, cbdata->cbref);
+ }
+
lua_pushnil (L);
return 1;