From: Bert Hubert Date: Sun, 3 Feb 2008 16:26:28 +0000 (+0000) Subject: add some sanity checking on domain name lengths X-Git-Tag: rec-3.1.7.1~114 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=62e1e3216c19faf593d036aca20d777b8a6225ff;p=pdns add some sanity checking on domain name lengths git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@1127 d19b8d6e-7fed-0310-83ef-9ca221ded41b --- diff --git a/pdns/packetcache.cc b/pdns/packetcache.cc index 5cefa081e..57f8b0a41 100644 --- a/pdns/packetcache.cc +++ b/pdns/packetcache.cc @@ -56,7 +56,9 @@ void PacketCache::insert(DNSPacket *q, DNSPacket *r) bool packetMeritsRecursion=d_doRecursion && q->d.rd; char ckey[512]; - int len=q->qdomain.length(); + unsigned int len=q->qdomain.length(); + if(len > sizeof(ckey)) + return; memcpy(ckey,q->qdomain.c_str(),len); // add TOLOWER HERE FIXME XXX ckey[len]='|'; ckey[len+1]=packetMeritsRecursion ? 'r' : 'n'; @@ -87,8 +89,10 @@ void PacketCache::insert(const char *packet, int length) bool packetMeritsRecursion=d_doRecursion && p.d.rd; char ckey[512]; - int len=p.qdomain.length(); - memcpy(ckey,p.qdomain.c_str(),len); // add TOLOWER HERE FIXME XXX + unsigned int len=p.qdomain.length(); + if(len > sizeof(ckey)) + return; + memcpy(ckey, p.qdomain.c_str(), len); // add TOLOWER HERE FIXME XXX ckey[len]='|'; ckey[len+1]=packetMeritsRecursion ? 'r' : 'n'; ckey[len+2]=(p.qtype.getCode()>>8) & 0xff;