]> granicus.if.org Git - pdns/commitdiff
auth: Remove VLAs
authorRemi Gacogne <remi.gacogne@powerdns.com>
Fri, 23 Mar 2018 11:21:51 +0000 (12:21 +0100)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Fri, 23 Mar 2018 13:30:53 +0000 (14:30 +0100)
modules/pipebackend/coprocess.cc
modules/remotebackend/pipeconnector.cc
pdns/common_startup.cc
pdns/dnstcpbench.cc
pdns/nameserver.cc
pdns/nameserver.hh
pdns/pkcs11signers.cc
pdns/rfc2136handler.cc

index ecc7e10892fb198300f6c77205fc041d3a800e2c..029a8b8dacef0ae146108cb5bd63ddcf8226c465 100644 (file)
@@ -45,13 +45,13 @@ CoProcess::CoProcess(const string &command,int timeout, int infd, int outfd)
   vector <string> v;
   split(v, command, is_any_of(" "));
 
-  const char *argv[v.size()+1];
+  std::vector<const char *>argv(v.size()+1);
   argv[v.size()]=0;
 
   for (size_t n = 0; n < v.size(); n++)
     argv[n]=v[n].c_str();
   // we get away with not copying since nobody resizes v 
-  launch(argv, timeout, infd, outfd);
+  launch(&argv.at(0), timeout, infd, outfd);
 }
 
 void CoProcess::launch(const char **argv, int timeout, int infd, int outfd)
index 54cdb03199e68c5157e77d9951b14738d4a3a95f..ba3aaba9a428aa15358bb95f6cfa392354805842 100644 (file)
@@ -64,7 +64,7 @@ void PipeConnector::launch() {
   std::vector <std::string> v;
   split(v, command, is_any_of(" "));
 
-  const char *argv[v.size()+1];
+  std::vector<const char *>argv(v.size()+1);
   argv[v.size()]=0;
 
   for (size_t n = 0; n < v.size(); n++)
@@ -107,7 +107,7 @@ void PipeConnector::launch() {
 
     // stdin & stdout are now connected, fire up our coprocess!
 
-    if(execv(argv[0], const_cast<char * const *>(argv))<0) // now what
+    if(execv(argv[0], const_cast<char * const *>(&argv[0]))<0) // now what
       exit(123);
 
     /* not a lot we can do here. We shouldn't return because that will leave a forked process around.
index 4c74222c9687a532541a1ea6ba87f62332cc5196..6c7a7ec494efe62b1bd61dc10945c149e37403f5 100644 (file)
@@ -366,6 +366,8 @@ try
   int diff;
   bool logDNSQueries = ::arg().mustDo("log-dns-queries");
   shared_ptr<UDPNameserver> NS;
+  std::string buffer;
+  buffer.resize(DNSPacket::s_udpTruncationThreshold);
 
   // If we have SO_REUSEPORT then create a new port for all receiver threads
   // other than the first one.
@@ -379,7 +381,7 @@ try
   }
 
   for(;;) {
-    if(!(P=NS->receive(&question))) { // receive a packet         inline
+    if(!(P=NS->receive(&question, buffer))) { // receive a packet         inline
       continue;                    // packet was broken, try again
     }
 
index fbeba1ba55a139e103655e1d0f13c050edf154ab..2c6e7fb42e3c3229321549e47677958e98a06870 100644 (file)
@@ -250,7 +250,7 @@ try
   }
 
 
-  pthread_t workers[numworkers];
+  std::vector<pthread_t> workers(numworkers);
 
   FILE* fp;
   if(!g_vm.count("file"))
index a37720ccb174b39de3180735dfa1cdedd3fc4546..2c0501de3938627cd015cc3855c910d6d6faf06b 100644 (file)
@@ -303,12 +303,11 @@ void UDPNameserver::send(DNSPacket *p)
     L<<Logger::Error<<"Error sending reply with sendmsg (socket="<<p->getSocket()<<", dest="<<p->d_remote.toStringWithPort()<<"): "<<strerror(errno)<<endl;
 }
 
-DNSPacket *UDPNameserver::receive(DNSPacket *prefilled)
+DNSPacket *UDPNameserver::receive(DNSPacket *prefilled, std::string& buffer)
 {
   ComboAddress remote;
   extern StatBag S;
   ssize_t len=-1;
-  char mesg[DNSPacket::s_udpTruncationThreshold];
   Utility::sock_t sock=-1;
 
   struct msghdr msgh;
@@ -316,7 +315,7 @@ DNSPacket *UDPNameserver::receive(DNSPacket *prefilled)
   char cbuf[256];
 
   remote.sin6.sin6_family=AF_INET6; // make sure it is big enough
-  fillMSGHdr(&msgh, &iov, cbuf, sizeof(cbuf), mesg, sizeof(mesg), &remote);
+  fillMSGHdr(&msgh, &iov, cbuf, sizeof(cbuf), &buffer.at(0), buffer.size(), &remote);
   
   int err;
   vector<struct pollfd> rfds= d_rfds;
@@ -378,7 +377,7 @@ DNSPacket *UDPNameserver::receive(DNSPacket *prefilled)
   else
     packet->d_dt.set(); // timing    
 
-  if(packet->parse(mesg, (size_t) len)<0) {
+  if(packet->parse(&buffer.at(0), (size_t) len)<0) {
     S.inc("corrupt-packets");
     S.ringAccount("remotes-corrupt", packet->d_remote);
 
index b5b8555553764581f8b329eccd0ccd17585b3832..d9d04198f286a1ca37f107d6522027db32e75a8a 100644 (file)
@@ -81,7 +81,7 @@ class UDPNameserver
 {
 public:
   UDPNameserver( bool additional_socket = false );  //!< Opens the socket
-  DNSPacket *receive(DNSPacket *prefilled=0); //!< call this in a while or for(;;) loop to get packets
+  DNSPacket *receive(DNSPacket *prefilled, std::string& buffer); //!< call this in a while or for(;;) loop to get packets
   void send(DNSPacket *); //!< send a DNSPacket. Will call DNSPacket::truncate() if over 512 bytes
   inline bool canReusePort() {
 #ifdef SO_REUSEPORT
index 26288e72a57607856caf029e8b4a2319fe009fea..4ad764c488c41a6ba5df8c29db5e1d4e99b78e10 100644 (file)
@@ -672,8 +672,8 @@ CK_RV Pkcs11Slot::HuntSlot(const string& tokenId, CK_SLOT_ID &slotId, _CK_SLOT_I
   }
 
   // get the actual slot ids
-  CK_SLOT_ID slotIds[slots];
-  err = functions->C_GetSlotList(CK_FALSE, slotIds, &slots);
+  std::vector<CK_SLOT_ID> slotIds(slots);
+  err = functions->C_GetSlotList(CK_FALSE, &slotIds.at(0), &slots);
   if (err) {
     L<<Logger::Warning<<"C_GetSlotList(CK_FALSE, slotIds, &slots) = " << err << std::endl;
     return err;
index bc881d498690fd31e9c64aa3de3943fb20a79548..9b61e8ae19749b342314cdaf15dae7a5a11b8c0a 100644 (file)
@@ -675,8 +675,8 @@ int PacketHandler::forwardPacket(const string &msgPrefix, DNSPacket *p, DomainIn
     }
     size_t packetLen = lenBuf[0]*256+lenBuf[1];
 
-    char buf[packetLen];
-    recvRes = recv(sock, &buf, packetLen, 0);
+    buffer.resize(packetLen);
+    recvRes = recv(sock, &buffer.at(0), packetLen, 0);
     if (recvRes < 0) {
       L<<Logger::Error<<msgPrefix<<"Could not receive data (dnspacket) from master at "<<remote.toStringWithPort()<<", error:"<<stringerror()<<endl;
       try {
@@ -695,7 +695,7 @@ int PacketHandler::forwardPacket(const string &msgPrefix, DNSPacket *p, DomainIn
     }
 
     try {
-      MOADNSParser mdp(false, buf, static_cast<unsigned int>(recvRes));
+      MOADNSParser mdp(false, buffer.data(), static_cast<unsigned int>(recvRes));
       L<<Logger::Info<<msgPrefix<<"Forward update message to "<<remote.toStringWithPort()<<", result was RCode "<<mdp.d_header.rcode<<endl;
       return mdp.d_header.rcode;
     }