diff --git a/daemon/worker.c b/daemon/worker.c index 38b3d1873..a601a816f 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -1111,6 +1111,7 @@ worker_handle_request(struct comm_point* c, void* arg, int error, if(!query_info_parse(&qinfo, c->buffer)) { verbose(VERB_ALGO, "worker parse request: formerror."); log_addr(VERB_CLIENT,"from",&repinfo->addr, repinfo->addrlen); + memset(&qinfo, 0, sizeof(qinfo)); /* zero qinfo.qname */ if(worker_err_ratelimit(worker, LDNS_RCODE_FORMERR) == -1) { comm_point_drop_reply(repinfo); return 0; diff --git a/doc/Changelog b/doc/Changelog index 1333c8387..f37104e55 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +29 August 2017: Wouter + - Fix #1414: fix segfault on parse failure and log_replies. + 28 August 2017: Wouter - Fix #1415: patch to free dnscrypt environment on reload. - iana portlist update diff --git a/util/data/msgreply.c b/util/data/msgreply.c index 2ce898d7f..6d80cce4c 100644 --- a/util/data/msgreply.c +++ b/util/data/msgreply.c @@ -840,7 +840,9 @@ log_reply_info(enum verbosity_value v, struct query_info *qinf, { log_info("%s - - - %s - - - ", clientip_buf, rcode_buf); } else { - dname_str(qinf->qname, qname_buf); + if(qinf->qname) + dname_str(qinf->qname, qname_buf); + else snprintf(qname_buf, sizeof(qname_buf), "null"); pktlen = sldns_buffer_limit(rmsg); sldns_wire2str_type_buf(qinf->qtype, type_buf, sizeof(type_buf)); sldns_wire2str_class_buf(qinf->qclass, class_buf, sizeof(class_buf));