From 79aa8d5cdbb348744e07adac0b135b08bd2df0b1 Mon Sep 17 00:00:00 2001 From: pfelt Date: Thu, 2 Sep 2010 03:36:59 +0000 Subject: [PATCH] -- dns lookups on domains with no MX can cause an invalid free due to an unitialized pointer -- fix an out of order assignment to prevent null dereference --- src/libs/xpl/dns.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/libs/xpl/dns.c b/src/libs/xpl/dns.c index 7d43609..58f9549 100644 --- a/src/libs/xpl/dns.c +++ b/src/libs/xpl/dns.c @@ -165,10 +165,11 @@ _XplDnsResult_PrintResults(XplDns_Result *result) void XplDnsResultFree(XplDns_Result *result) { - XplDns_RecordList *item = result->list; + XplDns_RecordList *item; XplDns_RecordList *last; if (result == NULL) return; + item = result->list; while (item != NULL) { last = item; @@ -321,6 +322,7 @@ _XplDns_QueryFakeMx(const char *domain) strncpy(list->record.MX.mxname, domain, XPLDNS_NAMELEN); list->record.MX.preference = 0; list->type = XPLDNS_RR_MX; + list->next = NULL; result = MemMalloc(sizeof(XplDns_Result)); result->list = list; @@ -399,6 +401,7 @@ _XplDns_ParseQuery(const unsigned char *answer_buffer, int answer_len, XplDns_Re char answer_domain[XPLDNS_NAMELEN + 1]; item = MemMalloc(sizeof(XplDns_RecordList)); + item->next = NULL; answer_domain[0] = '\0'; res = _XplDns_ParseName(answer_buffer, answer_len,