From: Vsevolod Stakhov Date: Tue, 15 Dec 2009 14:38:11 +0000 (+0300) Subject: * Fix inserting one list to another in spf parser (include border elements) X-Git-Tag: 0.3.0~107 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=b7046a0e6667e9c840b83acaf08f9ac117508eaa;p=rspamd.git * Fix inserting one list to another in spf parser (include border elements) --- diff --git a/src/spf.c b/src/spf.c index 662ae285b..49ef39891 100644 --- a/src/spf.c +++ b/src/spf.c @@ -285,18 +285,29 @@ spf_record_dns_callback (int result, char type, int count, int ttl, void *addres /* Insert new list in place of include element */ last = g_list_last (cb->rec->addrs); - if (elt->prev) { - elt->prev->next = cb->rec->addrs; - } - if (elt->next) { - elt->next->prev = last; + if (elt->prev == NULL && elt->next == NULL) { + g_list_free1 (elt); } - cb->rec->addrs->prev = elt->prev; - last->next = elt->next; + else { + + if (elt->prev) { + elt->prev->next = cb->rec->addrs; + } + else { + /* Elt is the first element, so we need to shift temporary list */ + tmp = elt->next; + } + if (elt->next) { + elt->next->prev = last; + last->next = elt->next; + } - cb->rec->addrs = tmp; - g_list_free1 (elt); + cb->rec->addrs->prev = elt->prev; + + cb->rec->addrs = tmp; + g_list_free1 (elt); + } } } }