From: Mukund Sivaraman Date: Wed, 9 Jan 2013 05:53:47 +0000 (+0530) Subject: [2435] Don't throw in case of out of zone queries X-Git-Tag: bind10-1.0.0-rc-release~122 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=5e3bc4cf78dddd89f3a9e4670336b7d46bbb124e;p=thirdparty%2Fkea.git [2435] Don't throw in case of out of zone queries --- diff --git a/src/lib/datasrc/rrset_collection.cc b/src/lib/datasrc/rrset_collection.cc index e4cfd88015..ffe102e11b 100644 --- a/src/lib/datasrc/rrset_collection.cc +++ b/src/lib/datasrc/rrset_collection.cc @@ -35,11 +35,17 @@ RRsetCollection::find(const isc::dns::Name& name, } ZoneFinder& finder = updater_->getFinder(); - ZoneFinderContextPtr result = - finder.find(name, rrtype, - ZoneFinder::NO_WILDCARD | ZoneFinder::FIND_GLUE_OK); - - return (result->rrset); + try { + ZoneFinderContextPtr result = + finder.find(name, rrtype, + ZoneFinder::NO_WILDCARD | ZoneFinder::FIND_GLUE_OK); + return (result->rrset); + } catch (const OutOfZone&) { + // As RRsetCollection is an arbitrary set of RRsets, in case the + // searched name is out of zone, we return nothing instead of + // propagating the exception. + return (ConstRRsetPtr()); + } } RRsetCollectionBase::IterPtr diff --git a/src/lib/datasrc/tests/database_unittest.cc b/src/lib/datasrc/tests/database_unittest.cc index 39729f8d27..5b19ace943 100644 --- a/src/lib/datasrc/tests/database_unittest.cc +++ b/src/lib/datasrc/tests/database_unittest.cc @@ -4198,6 +4198,11 @@ TYPED_TEST(RRsetCollectionTest, find) { rrset = this->collection.find(Name("www.example.org"), RRClass::CH(), RRType::AAAA()); EXPECT_FALSE(rrset); + + // Out of zone find()s must not throw. + rrset = this->collection.find(Name("www.example.com"), this->qclass_, + RRType::A()); + EXPECT_FALSE(rrset); } TYPED_TEST(RRsetCollectionTest, iteratorTest) {