From f1c712f75ca63015403cff0f15b89d67efcf7377 Mon Sep 17 00:00:00 2001 From: Remi Gacogne Date: Wed, 3 Mar 2021 10:59:11 +0100 Subject: [PATCH] dnsdist: Fix size check during trailing data addition, regression tests --- pdns/dnsdist.cc | 3 +++ regression-tests.dnsdist/test_Trailing.py | 10 ++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/pdns/dnsdist.cc b/pdns/dnsdist.cc index 8aa49a489f..9f44a68663 100644 --- a/pdns/dnsdist.cc +++ b/pdns/dnsdist.cc @@ -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; diff --git a/regression-tests.dnsdist/test_Trailing.py b/regression-tests.dnsdist/test_Trailing.py index ee44a99b5f..299f08524c 100644 --- a/regression-tests.dnsdist/test_Trailing.py +++ b/regression-tests.dnsdist/test_Trailing.py @@ -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 -- 2.47.2