]> granicus.if.org Git - pdns/commitdiff
dnsdist: Minor fixes reported by coverity
authorRemi Gacogne <remi.gacogne@powerdns.com>
Fri, 8 Jan 2016 08:51:38 +0000 (09:51 +0100)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Fri, 8 Jan 2016 09:17:51 +0000 (10:17 +0100)
- Handle connection error in client mode
- Prevent FPE in some top* functions when no queries were processed
- Close Downstream FD in the destructor (no that we really care)

pdns/dnsdist-console.cc
pdns/dnsdist-lua.cc
pdns/dnsdist.hh

index 81f8fdc8aa761677e1026eff68d8169c593199d0..70b1276a03f236ddbfca78c057b4dd511323d3d9 100644 (file)
@@ -19,6 +19,10 @@ void doClient(ComboAddress server, const std::string& command)
 {
   cout<<"Connecting to "<<server.toStringWithPort()<<endl;
   int fd=socket(server.sin4.sin_family, SOCK_STREAM, 0);
+  if (fd < 0) {
+    cerr<<"Unable to connect to "<<server.toStringWithPort()<<endl;
+    return;
+  }
   SConnect(fd, server);
 
   SodiumNonce theirs, ours;
@@ -40,6 +44,7 @@ void doClient(ComboAddress server, const std::string& command)
     msg.assign(resp.get(), len);
     msg=sodDecryptSym(msg, g_key, theirs);
     cout<<msg<<endl;
+    close(fd);
     return; 
   }
 
index 718d292e4c9cf754c4bf2ed3904a78f7e253391d..d8c1dd168e8f22401d9f163b9daf1075a8d92e8a 100644 (file)
@@ -113,7 +113,7 @@ std::unordered_map<int, vector<boost::variant<string,double>>> getGenResponses(u
     else
       ret.insert({count++, {rc.second.toString(), rc.first, 100.0*rc.first/total}});
   }
-  ret.insert({count, {"Rest", rest, 100.0*rest/total}});
+  ret.insert({count, {"Rest", rest, total > 0 ? 100.0*rest/total : 100.0}});
   return ret;
 }
 
@@ -966,7 +966,7 @@ vector<std::function<void(void)>> setupLua(bool client, const std::string& confi
        else
          g_outputBuffer += (fmt % (count++) % rc.second.toString() % rc.first % (100.0*rc.first/total)).str();
       }
-      g_outputBuffer += (fmt % (count) % "Rest" % rest % (100.0*rest/total)).str();
+      g_outputBuffer += (fmt % (count) % "Rest" % rest % (total > 0 ? 100.0*rest/total : 100.0)).str();
     });
 
   g_lua.writeFunction("getTopQueries", [](unsigned int top, boost::optional<int> labels) {
@@ -1008,7 +1008,7 @@ vector<std::function<void(void)>> setupLua(bool client, const std::string& confi
        else
          ret.insert({count++, {rc.second.toString(), rc.first, 100.0*rc.first/total}});
       }
-      ret.insert({count, {"Rest", rest, 100.0*rest/total}});
+      ret.insert({count, {"Rest", rest, total > 0 ? 100.0*rest/total : 100.0}});
       return ret;
 
     });
index 59dd339c911b18eb69a91a1e25f111716dd93eed..ed4d873b5b897df759b9d9079f323ff71a90950e 100644 (file)
@@ -280,6 +280,11 @@ struct DownstreamState
 {
   DownstreamState(const ComboAddress& remote_, const ComboAddress& sourceAddr_, unsigned int sourceItf);
   DownstreamState(const ComboAddress& remote_): DownstreamState(remote_, ComboAddress(), 0) {}
+  ~DownstreamState()
+  {
+    if (fd >= 0)
+      close(fd);
+  }
 
   int fd;            
   std::thread tid;