From f330413e9a2cce5b0e638ea765f95e4e81e9ff44 Mon Sep 17 00:00:00 2001 From: Peter van Dijk Date: Thu, 14 Jan 2021 11:20:03 +0100 Subject: [PATCH] auth lmdb: do not reuse backend that has seen corrupted data --- modules/lmdbbackend/lmdbbackend.cc | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) 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; -- 2.47.2