]> granicus.if.org Git - pdns/commitdiff
when pre-parsing qname for gettag in lua, catch exception and set tag to 0
authorbert hubert <bert.hubert@netherlabs.nl>
Fri, 4 Mar 2016 15:57:10 +0000 (16:57 +0100)
committerbert hubert <bert.hubert@netherlabs.nl>
Fri, 4 Mar 2016 15:57:31 +0000 (16:57 +0100)
pdns/pdns_recursor.cc

index 3d56ab172d5bc9aa916dc13a333f6547528233c4..e0eda04b9b23857a193a380820d9334de9ba1d74 100644 (file)
@@ -1155,8 +1155,15 @@ string* doProcessUDPQuestion(const std::string& question, const ComboAddress& fr
     if(t_pdl->get() && (*t_pdl)->d_gettag) {
       unsigned int consumed=0;
       uint16_t qtype=0;
-      DNSName qname(question.c_str(), question.length(), sizeof(dnsheader), false, &qtype, 0, &consumed);
-      ctag=(*t_pdl)->gettag(fromaddr, destaddr, qname, qtype);
+      try {
+        DNSName qname(question.c_str(), question.length(), sizeof(dnsheader), false, &qtype, 0, &consumed);
+        ctag=(*t_pdl)->gettag(fromaddr, destaddr, qname, qtype);
+      }
+      catch(std::exception& e)
+      {
+        if(g_logCommonErrors)
+          L<<Logger::Warning<<"Error parsing a query packet for tag determination, setting tag=0: "<<e.what()<<endl;
+      } 
     }
 
     if(!SyncRes::s_nopacketcache && t_packetCache->getResponsePacket(ctag, question, g_now.tv_sec, &response, &age)) {