]> 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>
Wed, 26 Oct 2016 08:00:39 +0000 (10:00 +0200)
It obviously happens if stats-ringbuffer-entries is set to 0.

pdns/pdns_recursor.cc
pdns/rec_channel_rec.cc

index 487fabfe78c4832fda34b4328a28d5f711c7e691..71033e3918a12322d678ffac1f3db4c989c1acf0 100644 (file)
@@ -586,7 +586,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++;
@@ -667,7 +667,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 d23123207a90e81c39c53bdacc66a12144cf1338..9d029d34ec6e6371ed5893d998158e348e145417 100644 (file)
@@ -963,7 +963,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);
   }