]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
rec: check RRSIG record is valid in zonemd before processing further (#YWH-PGM6095...
authorOtto Moerbeek <otto.moerbeek@open-xchange.com>
Mon, 4 May 2026 12:11:04 +0000 (14:11 +0200)
committerOtto Moerbeek <otto.moerbeek@open-xchange.com>
Mon, 8 Jun 2026 09:55:12 +0000 (11:55 +0200)
Signed-off-by: Otto Moerbeek <otto.moerbeek@open-xchange.com>
pdns/zonemd.cc

index 92a10cfde3c3ee3e010ea5b3f8ed53f8540944ef..0c97aaed515910d2470512e09cccfb94fcbc1b7e 100644 (file)
@@ -232,6 +232,9 @@ void pdns::ZoneMD::verify(bool& validationDone, bool& validationOK)
     for (auto& resourceRecord : rrset.second) {
       if (qtype == QType::RRSIG) {
         const auto rrsig = std::dynamic_pointer_cast<const RRSIGRecordContent>(resourceRecord);
+        if (rrsig == nullptr) {
+          continue;
+        }
         if (rrsig->d_type == QType::ZONEMD && qname == DNSName(d_zone)) {
           continue;
         }
@@ -254,7 +257,10 @@ void pdns::ZoneMD::verify(bool& validationDone, bool& validationOK)
       // RRSIG is special, since  original TTL depends on qtype covered by RRSIG
       // which can be different per record
       for (const auto& rrsig : sorted) {
-        auto rrsigc = std::dynamic_pointer_cast<const RRSIGRecordContent>(rrsig);
+        const auto rrsigc = std::dynamic_pointer_cast<const RRSIGRecordContent>(rrsig);
+        if (rrsigc == nullptr) {
+          continue;
+        }
         RRSIGRecordContent rrc;
         rrc.d_originalttl = d_resourceRecordSetTTLs[pair(rrset.first.first, rrsigc->d_type)];
         rrc.d_type = qtype;