From: JINMEI Tatuya Date: Thu, 16 Feb 2012 22:46:52 +0000 (-0800) Subject: [1584review] added a test for a run time collision case for wildcard + NSEC3. X-Git-Tag: trac2351_base~247^2^2~1 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=694ee39256cd2ebad4b1f5b657fd2a2556ad10a5;p=thirdparty%2Fkea.git [1584review] added a test for a run time collision case for wildcard + NSEC3. main code was simplified; we let Message::addRRset() catch the error and throw. --- diff --git a/src/bin/auth/query.cc b/src/bin/auth/query.cc index 07b0307d60..ec648f42cd 100644 --- a/src/bin/auth/query.cc +++ b/src/bin/auth/query.cc @@ -195,10 +195,9 @@ Query::addWildcardProof(ZoneFinder& finder, // met the zone is broken anyway). const ZoneFinder::FindNSEC3Result NSEC3Result( finder.findNSEC3(qname_, true)); - if (NULL == NSEC3Result.next_proof) { - isc_throw(BadNSEC3, "Unexpected NSEC3 " - "result for wildcard proof"); - } + // Note that at this point next_proof must not be NULL unless it's + // a run time collision (or zone/findNSEC3() is broken). The + // unexpected case will be caught in addRRset() and result in SERVFAIL. response_.addRRset(Message::SECTION_AUTHORITY, boost::const_pointer_cast( NSEC3Result.next_proof), dnssec_); diff --git a/src/bin/auth/tests/query_unittest.cc b/src/bin/auth/tests/query_unittest.cc index 8bee1939c3..4152ce5508 100644 --- a/src/bin/auth/tests/query_unittest.cc +++ b/src/bin/auth/tests/query_unittest.cc @@ -1415,6 +1415,20 @@ TEST_F(QueryTest, CNAMEwildNSEC3) { mock_finder->getOrigin()); } +TEST_F(QueryTest, badWildcardNSEC3) { + // Similar to wildcardNSEC3, but emulating run time collision by + // returning NULL in the next closer proof for the closest encloser + // proof. + mock_finder->setNSEC3Flag(true); + ZoneFinder::FindNSEC3Result nsec3(true, 0, textToRRset(nsec3_apex_txt), + ConstRRsetPtr()); + mock_finder->setNSEC3Result(&nsec3); + + EXPECT_THROW(Query(memory_client, Name("www.wild.example.com"), + RRType::A(), response, true).process(), + isc::InvalidParameter); +} + TEST_F(QueryTest, badWildcardProof1) { // Unexpected case in wildcard proof: ZoneFinder::find() returns SUCCESS // when NXDOMAIN is expected.