From fae8fe070550f40f9acfb7b9e2401a8c0cde5977 Mon Sep 17 00:00:00 2001 From: Remi Gacogne Date: Fri, 23 Mar 2018 11:14:57 +0100 Subject: [PATCH] rec: Get rid of a VLA (and a copy) in handleUDPServerResponse() --- pdns/pdns_recursor.cc | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pdns/pdns_recursor.cc b/pdns/pdns_recursor.cc index 60fc1ccab7..2ec5fc2d7b 100644 --- a/pdns/pdns_recursor.cc +++ b/pdns/pdns_recursor.cc @@ -2543,11 +2543,12 @@ static void handleUDPServerResponse(int fd, FDMultiplexer::funcparam_t& var) { PacketID pid=any_cast(var); ssize_t len; - char data[g_outgoingEDNSBufsize]; + std::string packet; + packet.resize(g_outgoingEDNSBufsize); ComboAddress fromaddr; socklen_t addrlen=sizeof(fromaddr); - len=recvfrom(fd, data, sizeof(data), 0, (sockaddr *)&fromaddr, &addrlen); + len=recvfrom(fd, &packet.at(0), packet.size(), 0, (sockaddr *)&fromaddr, &addrlen); if(len < (ssize_t) sizeof(dnsheader)) { if(len < 0) @@ -2570,8 +2571,9 @@ static void handleUDPServerResponse(int fd, FDMultiplexer::funcparam_t& var) return; } + packet.resize(len); dnsheader dh; - memcpy(&dh, data, sizeof(dh)); + memcpy(&dh, &packet.at(0), sizeof(dh)); PacketID pident; pident.remote=fromaddr; @@ -2590,7 +2592,7 @@ static void handleUDPServerResponse(int fd, FDMultiplexer::funcparam_t& var) else { try { if(len > 12) - pident.domain=DNSName(data, len, 12, false, &pident.type); // don't copy this from above - we need to do the actual read + pident.domain=DNSName(&packet.at(0), len, 12, false, &pident.type); // don't copy this from above - we need to do the actual read } catch(std::exception& e) { g_stats.serverParseError++; // won't be fed to lwres.cc, so we have to increment @@ -2598,8 +2600,6 @@ static void handleUDPServerResponse(int fd, FDMultiplexer::funcparam_t& var) return; } } - string packet; - packet.assign(data, len); MT_t::waiters_t::iterator iter=MT->d_waiters.find(pident); if(iter != MT->d_waiters.end()) { -- 2.47.2