From b7046a0e6667e9c840b83acaf08f9ac117508eaa Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Tue, 15 Dec 2009 17:38:11 +0300 Subject: [PATCH] * Fix inserting one list to another in spf parser (include border elements) --- src/spf.c | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) 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); + } } } } -- 2.39.5