]> granicus.if.org Git - pdns/commitdiff
rec: Don't crash on an empty query ring
authorRemi Gacogne <remi.gacogne@powerdns.com>
Wed, 26 Oct 2016 08:00:39 +0000 (10:00 +0200)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Thu, 22 Dec 2016 09:29:27 +0000 (10:29 +0100)
It obviously happens if stats-ringbuffer-entries is set to 0.

(cherry picked from commit 5af86fdcdee2843d80d40dd1c22c137e471f9484)

pdns/pdns_recursor.cc
pdns/rec_channel_rec.cc

index 5e73fbac32be5e1cb44d13a9b53658ced9e6f51a..306b0955dfd2f1c3013e9e6f95b28c3c79f0c42f 100644 (file)
@@ -590,7 +590,7 @@ void updateResponseStats(int res, const ComboAddress& remote, unsigned int packe
   case RCode::ServFail:
     if(t_servfailremotes) {
       t_servfailremotes->push_back(remote);
-      if(query) // packet cache
+      if(query && t_servfailqueryring) // packet cache
        t_servfailqueryring->push_back(make_pair(*query, qtype));
     }
     g_stats.servFails++;
@@ -671,7 +671,8 @@ void startDoResolve(void *p)
 {
   DNSComboWriter* dc=(DNSComboWriter *)p;
   try {
-    t_queryring->push_back(make_pair(dc->d_mdp.d_qname, dc->d_mdp.d_qtype));
+    if (t_queryring)
+      t_queryring->push_back(make_pair(dc->d_mdp.d_qname, dc->d_mdp.d_qtype));
 
     uint32_t maxanswersize= dc->d_tcp ? 65535 : min((uint16_t) 512, g_udpTruncationThreshold);
     EDNSOpts edo;
index f603d8680407d8b8e7df0564d63cb983493d065a..e02f77a462ba766e1ed6cd378879744ad4b18305 100644 (file)
@@ -942,7 +942,7 @@ vector<pair<DNSName,uint16_t> >* pleaseGetServfailQueryRing()
   vector<query_t>* ret = new vector<query_t>();
   if(!t_servfailqueryring)
     return ret;
-  ret->reserve(t_queryring->size());
+  ret->reserve(t_servfailqueryring->size());
   for(const query_t& q :  *t_servfailqueryring) {
     ret->push_back(q);
   }