diff --git a/bin/delv/delv.c b/bin/delv/delv.c index a12c54bb44..927100e72e 100644 --- a/bin/delv/delv.c +++ b/bin/delv/delv.c @@ -1982,7 +1982,9 @@ cleanup: isc_mem_put(mctx, namelist, sizeof(*namelist)); isc_loopmgr_shutdown(loopmgr); - dns_client_detach(&client); + if (client != NULL) { + dns_client_detach(&client); + } } static void diff --git a/bin/tests/system/digdelv/tests.sh b/bin/tests/system/digdelv/tests.sh index 6f8dacdaca..f63033271c 100644 --- a/bin/tests/system/digdelv/tests.sh +++ b/bin/tests/system/digdelv/tests.sh @@ -1428,6 +1428,18 @@ if [ -x "$DELV" ]; then if [ $ret -ne 0 ]; then echo_i "failed"; fi status=$((status + ret)) + n=$((n + 1)) + echo_i "checking delv exits cleanly on malformed query name ($n)" + ret=0 + longlabel="$(printf 'a%.0s' $(seq 1 64))" + delv_with_opts @10.53.0.3 -t a "$longlabel.example.com" >delv.out.test$n 2>&1 + rc=$? + # Pre-fix: SIGABRT (exit 134) from dns_client_detach(NULL) in run_resolve cleanup. + [ $rc -eq 134 ] && ret=1 + grep "label too long" delv.out.test$n >/dev/null || ret=1 + if [ $ret -ne 0 ]; then echo_i "failed"; fi + status=$((status + ret)) + n=$((n + 1)) echo_i "checking delv with IPv6 on IPv4 does not work ($n)" if testsock6 fd92:7065:b8e:ffff::3 2>/dev/null; then