commit 89252bc: [Fix] Fix crash with cname replies

Vsevolod Stakhov vsevolod at rspamd.com
Sun Sep 25 12:07:03 UTC 2022


Author: Vsevolod Stakhov
Date: 2022-09-25 13:02:22 +0100
URL: https://github.com/rspamd/rspamd/commit/89252bcf03a2213a72f348e210240bb96848e5aa

[Fix] Fix crash with cname replies

---
 src/lua/lua_http.c | 41 +++++++++++++++++++++++++++--------------
 1 file changed, 27 insertions(+), 14 deletions(-)

diff --git a/src/lua/lua_http.c b/src/lua/lua_http.c
index a53145c7c..4e8d98abb 100644
--- a/src/lua/lua_http.c
+++ b/src/lua/lua_http.c
@@ -20,6 +20,7 @@
 #include "ref.h"
 #include "unix-std.h"
 #include "zlib.h"
+#include "utlist.h"
 
 /***
  * @module rspamd_http
@@ -511,28 +512,40 @@ lua_http_dns_handler (struct rdns_reply *reply, gpointer ud)
 		REF_RELEASE (cbd);
 	}
 	else {
-		if (reply->entries->type == RDNS_REQUEST_A) {
-			cbd->addr = rspamd_inet_address_new (AF_INET,
-					&reply->entries->content.a.addr);
+		struct rdns_reply_entry *entry;
+
+		DL_FOREACH(reply->entries, entry) {
+			if (entry->type == RDNS_REQUEST_A) {
+				cbd->addr = rspamd_inet_address_new(AF_INET,
+						&entry->content.a.addr);
+				break;
+			}
+			else if (entry->type == RDNS_REQUEST_AAAA) {
+				cbd->addr = rspamd_inet_address_new(AF_INET6,
+						&entry->content.aaa.addr);
+				break;
+			}
 		}
-		else if (reply->entries->type == RDNS_REQUEST_AAAA) {
-			cbd->addr = rspamd_inet_address_new (AF_INET6,
-					&reply->entries->content.aaa.addr);
+
+		if (cbd->addr == NULL) {
+			lua_http_push_error (cbd, "unable to resolve host: no records with such name");
+			REF_RELEASE (cbd);
 		}
+		else {
+			REF_RETAIN (cbd);
+			if (!lua_http_make_connection(cbd)) {
+				lua_http_push_error(cbd, "unable to make connection to the host");
 
-		REF_RETAIN (cbd);
-		if (!lua_http_make_connection (cbd)) {
-			lua_http_push_error (cbd, "unable to make connection to the host");
+				if (cbd->ref.refcount > 1) {
+					REF_RELEASE (cbd);
+				}
 
-			if (cbd->ref.refcount > 1) {
 				REF_RELEASE (cbd);
-			}
 
+				return;
+			}
 			REF_RELEASE (cbd);
-
-			return;
 		}
-		REF_RELEASE (cbd);
 	}
 
 	if (item) {


More information about the Commits mailing list