Fix a dig segfault due to bad linked list usage [RT #37591]

The crash (#37591) seems to happen because the query is taken out of
lookup->q(query->link), and put on lookup->connecting(query->clink).
The code checks query->link where it is detached (-1 in next pointer).
However, there's no need to call send_tcp_connect() there as the queries
are already connecting at that point.
This commit is contained in:
Mukund Sivaraman 2014-12-03 16:04:28 +05:30
parent 88a2182a1a
commit c5e9423340
2 changed files with 5 additions and 1 deletions

View file

@ -1,3 +1,6 @@
4016. [bug] Fix a dig segfault due to bad linked list usage.
[RT #37591]
4015. [bug] Nameservers that are skipped due to them being
CNAMEs were not being logged. They are now logged
to category 'cname' as per BIND 8. [RT #37935]

View file

@ -3242,7 +3242,8 @@ connect_done(isc_task_t *task, isc_event_t *event) {
query->waiting_connect = ISC_FALSE;
isc_event_free(&event);
l = query->lookup;
if (l->current_query != NULL)
if ((l->current_query != NULL) &&
(ISC_LINK_LINKED(l->current_query, link)))
next = ISC_LIST_NEXT(l->current_query, link);
else
next = NULL;