]> granicus.if.org Git - pdns/commitdiff
add some sanity checking on domain name lengths
authorBert Hubert <bert.hubert@netherlabs.nl>
Sun, 3 Feb 2008 16:26:28 +0000 (16:26 +0000)
committerBert Hubert <bert.hubert@netherlabs.nl>
Sun, 3 Feb 2008 16:26:28 +0000 (16:26 +0000)
git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@1127 d19b8d6e-7fed-0310-83ef-9ca221ded41b

pdns/packetcache.cc

index 5cefa081eb2247b444a10861d2dd572dfe500c13..57f8b0a415ddc4d2e30946dc6fd460100fc9320b 100644 (file)
@@ -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;