From: Peter van Dijk Date: Thu, 14 Jan 2021 10:20:03 +0000 (+0100) Subject: auth lmdb: do not reuse backend that has seen corrupted data X-Git-Tag: dnsdist-1.6.0-alpha1~29^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=refs%2Fpull%2F9885%2Fhead;p=thirdparty%2Fpdns.git auth lmdb: do not reuse backend that has seen corrupted data --- diff --git a/modules/lmdbbackend/lmdbbackend.cc b/modules/lmdbbackend/lmdbbackend.cc index 241303d182..158429460f 100644 --- a/modules/lmdbbackend/lmdbbackend.cc +++ b/modules/lmdbbackend/lmdbbackend.cc @@ -781,20 +781,24 @@ bool LMDBBackend::get(DNSZoneRecord& rr) key = d_currentKey.get(); } - 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().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().rfind(d_matchkey, 0) != 0) { + d_getcursor.reset(); + } } + } catch (const std::exception &e) { + throw PDNSException(e.what()); } break;