From: Vsevolod Stakhov Date: Sun, 25 Sep 2022 12:02:22 +0000 (+0100) Subject: [Fix] Fix crash with cname replies X-Git-Tag: 3.3~5 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=89252bcf03a2213a72f348e210240bb96848e5aa;p=rspamd.git [Fix] Fix crash with cname replies --- 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) {