]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
Perform length check in RecordTextReader::xfrBlob(). 17455/head
authorMiod Vallat <miod.vallat@powerdns.com>
Thu, 21 May 2026 13:08:49 +0000 (15:08 +0200)
committerMiod Vallat <miod.vallat@powerdns.com>
Thu, 21 May 2026 13:08:49 +0000 (15:08 +0200)
Signed-off-by: Miod Vallat <miod.vallat@powerdns.com>
pdns/rcpgenerator.cc

index 86d8e02231089c4518ea505ab8d8371f31e1ad5a..5e31b250bb2d824db2f7653863f1662ed62c7e00 100644 (file)
@@ -327,7 +327,7 @@ void RecordTextReader::xfrBlobNoSpaces(string& val, int len)
     throw RecordTextException("Record length "+std::to_string(val.size()) + " does not match expected length '"+std::to_string(len));
 }
 
-void RecordTextReader::xfrBlob(string& val, int)
+void RecordTextReader::xfrBlob(string& val, int len)
 {
   skipSpaces();
   auto pos = d_pos;
@@ -342,6 +342,10 @@ void RecordTextReader::xfrBlob(string& val, int)
   boost::erase_all(tmp," ");
   val.clear();
   B64Decode(tmp, val);
+
+  if (len>-1 && val.size() != static_cast<size_t>(len)) {
+    throw RecordTextException("Record length "+std::to_string(val.size()) + " does not match expected length '"+std::to_string(len));
+  }
 }
 
 void RecordTextReader::xfrRFC1035CharString(string &val) {