mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-08-31 14:35:26 +00:00
When using +qr in dig print the data of the current query
In `send_udp()` and `launch_next_query()` functions, when calling `dighost_printmessage()` to print detailed information about the sent query, dig always prints the data of the first query in the lookup's queries list. The first query in the list can be already finished, having its handles freed, and accessing this information results in assertion failure. Print the current query's information instead.
This commit is contained in:
@@ -3080,10 +3080,9 @@ send_udp(dig_query_t *query) {
|
||||
debug("sendcount=%" PRIuFAST32, isc_refcount_current(&sendcount));
|
||||
|
||||
/* XXX qrflag, print_query, etc... */
|
||||
if (!ISC_LIST_EMPTY(query->lookup->q) && query->lookup->qr) {
|
||||
if (query->lookup->qr) {
|
||||
extrabytes = 0;
|
||||
dighost_printmessage(ISC_LIST_HEAD(query->lookup->q),
|
||||
&query->lookup->renderbuf,
|
||||
dighost_printmessage(query, &query->lookup->renderbuf,
|
||||
query->lookup->sendmsg, true);
|
||||
if (query->lookup->stats) {
|
||||
print_query_size(query);
|
||||
@@ -3426,10 +3425,10 @@ launch_next_query(dig_query_t *query) {
|
||||
isc_refcount_current(&sendcount));
|
||||
|
||||
/* XXX qrflag, print_query, etc... */
|
||||
if (!ISC_LIST_EMPTY(l->q) && l->qr) {
|
||||
if (l->qr) {
|
||||
extrabytes = 0;
|
||||
dighost_printmessage(ISC_LIST_HEAD(l->q), &l->renderbuf,
|
||||
l->sendmsg, true);
|
||||
dighost_printmessage(query, &l->renderbuf, l->sendmsg,
|
||||
true);
|
||||
if (l->stats) {
|
||||
print_query_size(query);
|
||||
}
|
||||
|
@@ -1081,6 +1081,15 @@ if [ -x "$DIG" ] ; then
|
||||
grep -F ";; No acceptable nameservers" dig.out.test$n > /dev/null || ret=1
|
||||
if [ $ret -ne 0 ]; then echo_i "failed"; fi
|
||||
status=$((status+ret))
|
||||
|
||||
# See [GL #3244] for more information
|
||||
n=$((n+1))
|
||||
echo_i "check that dig handles printing query information with +qr and +y when multiple queries are involved (including a failed query) ($n)"
|
||||
ret=0
|
||||
dig_with_opts +timeout=1 +qr +y @127.0.0.1 @10.53.0.3 a.example > dig.out.test$n 2>&1 || ret=1
|
||||
grep -F "IN A 10.0.0.1" dig.out.test$n > /dev/null || ret=1
|
||||
if [ $ret -ne 0 ]; then echo_i "failed"; fi
|
||||
status=$((status+ret))
|
||||
else
|
||||
echo_i "$DIG is needed, so skipping these dig tests"
|
||||
fi
|
||||
|
Reference in New Issue
Block a user