]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
auth lmdb: do not reuse backend that has seen corrupted data 9885/head
authorPeter van Dijk <peter.van.dijk@powerdns.com>
Thu, 14 Jan 2021 10:20:03 +0000 (11:20 +0100)
committerPeter van Dijk <peter.van.dijk@powerdns.com>
Thu, 14 Jan 2021 10:20:25 +0000 (11:20 +0100)
modules/lmdbbackend/lmdbbackend.cc

index 241303d182ad30855d31cb615b17a21e990ee171..158429460f36d208ef75342e1f53f8f689bbb6b7 100644 (file)
@@ -781,20 +781,24 @@ bool LMDBBackend::get(DNSZoneRecord& rr)
       key = d_currentKey.get<string_view>();
     }
 
-    const auto& drr = d_currentrrset.at(d_currentrrsetpos++);
-
-    rr.dr.d_name = compoundOrdername::getQName(key) + d_lookupdomain;
-    rr.domain_id = compoundOrdername::getDomainID(key);
-    rr.dr.d_type = compoundOrdername::getQType(key).getCode();
-    rr.dr.d_ttl = drr.ttl;
-    rr.dr.d_content = deserializeContentZR(rr.dr.d_type, rr.dr.d_name, drr.content);
-    rr.auth = drr.auth;
-
-    if(d_currentrrsetpos >= d_currentrrset.size()) {
-      d_currentrrset.clear();
-      if(d_getcursor->next(d_currentKey, d_currentVal) || d_currentKey.get<StringView>().rfind(d_matchkey, 0) != 0) {
-        d_getcursor.reset();
+    try {
+      const auto& drr = d_currentrrset.at(d_currentrrsetpos++);
+
+      rr.dr.d_name = compoundOrdername::getQName(key) + d_lookupdomain;
+      rr.domain_id = compoundOrdername::getDomainID(key);
+      rr.dr.d_type = compoundOrdername::getQType(key).getCode();
+      rr.dr.d_ttl = drr.ttl;
+      rr.dr.d_content = deserializeContentZR(rr.dr.d_type, rr.dr.d_name, drr.content);
+      rr.auth = drr.auth;
+
+      if(d_currentrrsetpos >= d_currentrrset.size()) {
+        d_currentrrset.clear();
+        if(d_getcursor->next(d_currentKey, d_currentVal) || d_currentKey.get<StringView>().rfind(d_matchkey, 0) != 0) {
+          d_getcursor.reset();
+        }
       }
+    } catch (const std::exception &e) {
+      throw PDNSException(e.what());
     }
 
     break;