]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Fix size check during trailing data addition, regression tests 10139/head
authorRemi Gacogne <remi.gacogne@powerdns.com>
Wed, 3 Mar 2021 09:59:11 +0000 (10:59 +0100)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Wed, 3 Mar 2021 09:59:11 +0000 (10:59 +0100)
pdns/dnsdist.cc
regression-tests.dnsdist/test_Trailing.py

index 8aa49a489fbb716088401563cf6c6aecf7c50b0b..9f44a68663c4e22d619ac99585d4ccdcb1f94b69 100644 (file)
@@ -208,6 +208,9 @@ bool DNSQuestion::setTrailingData(const std::string& tail)
   const uint16_t messageLen = getDNSPacketLength(message, this->data.size());
   this->data.resize(messageLen);
   if (tail.size() > 0) {
+    if (!hasRoomFor(tail.size())) {
+      return false;
+    }
     this->data.insert(this->data.end(), tail.begin(), tail.end());
   }
   return true;
index ee44a99b5f9d6a23d2cc4241e1276ac8c160f4e5..299f08524c86c3c514715660d84a4e0eccbe743f 100644 (file)
@@ -24,7 +24,10 @@ class TestTrailingDataToBackend(DNSDistTest):
     addAction("added.trailing.tests.powerdns.com.", LuaAction(replaceTrailingData))
 
     function fillBuffer(dq)
-        local available = 4096
+        local available = 4096 - dq.len
+        if dq.tcp then
+            available = 65535 - dq.len
+        end
         local tail = string.rep("A", available)
         local success = dq:setTrailingData(tail)
         if not success then
@@ -35,7 +38,10 @@ class TestTrailingDataToBackend(DNSDistTest):
     addAction("max.trailing.tests.powerdns.com.", LuaAction(fillBuffer))
 
     function exceedBuffer(dq)
-        local available = dq.size - dq.len
+        local available = 4096 - dq.len
+        if dq.tcp then
+            available = 65535 - dq.len
+        end
         local tail = string.rep("A", available + 1)
         local success = dq:setTrailingData(tail)
         if not success then