From: Remi Gacogne Date: Wed, 3 Mar 2021 09:59:11 +0000 (+0100) Subject: dnsdist: Fix size check during trailing data addition, regression tests X-Git-Tag: dnsdist-1.6.0-alpha2~3^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f1c712f75ca63015403cff0f15b89d67efcf7377;p=thirdparty%2Fpdns.git dnsdist: Fix size check during trailing data addition, regression tests --- 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