commit 1b39b28: [Fix] Fix registry leak in case of DNS errors

Vsevolod Stakhov vsevolod at highsecure.ru
Mon Sep 30 11:49:07 UTC 2019


Author: Vsevolod Stakhov
Date: 2019-09-30 12:45:39 +0100
URL: https://github.com/rspamd/rspamd/commit/1b39b28f6796c2a849af88a0cddb62210c9d7307 (HEAD -> master)

[Fix] Fix registry leak in case of DNS errors

---
 src/libserver/dns.c        |  2 ++
 src/lua/lua_dns_resolver.c | 11 ++++++++++-
 2 files changed, 12 insertions(+), 1 deletion(-)

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;


More information about the Commits mailing list