Browse Source

[2165] Check for NULL rrsets in stripRRsigs() itself

This will also be useful in the next commit.
Mukund Sivaraman 12 years ago
parent
commit
2a22df22a1
2 changed files with 19 additions and 16 deletions
  1. 1 1
      src/bin/auth/tests/query_unittest.cc
  2. 18 15
      src/lib/datasrc/zone.h

+ 1 - 1
src/bin/auth/tests/query_unittest.cc

@@ -485,7 +485,7 @@ protected:
                                        isc::dns::ConstRRsetPtr rrset,
                                        FindResultFlags flags = RESULT_DEFAULT)
     {
-        ConstRRsetPtr rr = (rrset ? stripRRsigs(rrset, options) : rrset);
+        ConstRRsetPtr rr = stripRRsigs(rrset, options);
         return (ZoneFinderContextPtr(
                     new Context(*this, options,
                                 ResultContext(code, rr, flags))));

+ 18 - 15
src/lib/datasrc/zone.h

@@ -138,23 +138,26 @@ public:
     /// requested.
     static isc::dns::ConstRRsetPtr
     stripRRsigs(isc::dns::ConstRRsetPtr rr, const FindOptions options) {
-        isc::dns::ConstRRsetPtr sig_rrset = rr->getRRsig();
-        if (sig_rrset &&
-            ((options & ZoneFinder::FIND_DNSSEC) == 0)) {
-            isc::dns::RRsetPtr result_base(new isc::dns::RRset(rr->getName(),
-                                           rr->getClass(),
-                                           rr->getType(),
-                                           rr->getTTL()));
-            for (isc::dns::RdataIteratorPtr i(rr->getRdataIterator());
-                 !i->isLast();
-                 i->next()) {
-                result_base->addRdata(i->getCurrent());
-            }
+        if (rr) {
+            isc::dns::ConstRRsetPtr sig_rrset = rr->getRRsig();
+            if (sig_rrset &&
+                ((options & ZoneFinder::FIND_DNSSEC) == 0)) {
+                isc::dns::RRsetPtr result_base
+                    (new isc::dns::RRset(rr->getName(),
+                                         rr->getClass(),
+                                         rr->getType(),
+                                         rr->getTTL()));
+                for (isc::dns::RdataIteratorPtr i(rr->getRdataIterator());
+                     !i->isLast();
+                     i->next()) {
+                    result_base->addRdata(i->getCurrent());
+                }
 
-            return(result_base);
-        } else {
-            return(rr);
+                return (result_base);
+            }
         }
+
+        return (rr);
     }
 
     /// \brief Context of the result of a find() call.