]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
add missing DBC checks for catz and add isc_magic checks; add DBC checks to ht.c
authorMark Andrews <marka@isc.org>
Wed, 28 Nov 2018 07:57:38 +0000 (18:57 +1100)
committerMark Andrews <marka@isc.org>
Thu, 29 Nov 2018 04:05:17 +0000 (15:05 +1100)
(cherry picked from commit a487473fc554baf1421193c6803dad466f470af5)
(cherry picked from commit 17d9fa3cc70b29c8dcf4495170bfc3f6c79f9083)

CHANGES
lib/dns/catz.c
lib/dns/include/dns/catz.h
lib/isc/ht.c
lib/isc/include/isc/ht.h
lib/isc/tests/ht_test.c

diff --git a/CHANGES b/CHANGES
index 460f4a5cc194a3343e1a8c5390f897760fbc3f9e..3936cdbdc0ae76e0ff301af33dee7a38a39b0303 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,6 @@
+5103.  [bug]           Add missing design by contract tests to dns_catz*.
+                       [GL #748]
+
 5101.  [bug]           Fix default installation path for Python modules.
                        [GL #730]
 
index c083933e512cc35327939e5352aa86e8936b5760..901c0cda3552c52715cc214c238e499e11f5de1e 100644 (file)
 #include <dns/view.h>
 #include <dns/zone.h>
 
+#define DNS_CATZ_ZONE_MAGIC ISC_MAGIC('c', 'a', 't', 'z')
+#define DNS_CATZ_ZONES_MAGIC ISC_MAGIC('c', 'a', 't', 's')
+#define DNS_CATZ_ENTRY_MAGIC ISC_MAGIC('c', 'a', 't', 'e')
+
+#define DNS_CATZ_ZONE_VALID(catz) ISC_MAGIC_VALID(catz, DNS_CATZ_ZONE_MAGIC)
+#define DNS_CATZ_ZONES_VALID(catzs) ISC_MAGIC_VALID(catzs, DNS_CATZ_ZONES_MAGIC)
+#define DNS_CATZ_ENTRY_VALID(entry) ISC_MAGIC_VALID(entry, DNS_CATZ_ENTRY_MAGIC)
 
 /*%
  * Single member zone in a catalog
  */
 struct dns_catz_entry {
+       unsigned int            magic;
        dns_name_t              name;
        dns_catz_options_t      opts;
        isc_refcount_t          refs;
@@ -46,6 +54,7 @@ struct dns_catz_entry {
  * Catalog zone
  */
 struct dns_catz_zone {
+       unsigned int            magic;
        dns_name_t              name;
        dns_catz_zones_t        *catzs;
        dns_rdata_t             soa;
@@ -58,7 +67,7 @@ struct dns_catz_zone {
        dns_catz_options_t      defoptions;
        dns_catz_options_t      zoneoptions;
        isc_time_t              lastupdated;
-       bool            updatepending;
+       bool                    updatepending;
        uint32_t                version;
 
        dns_db_t                *db;
@@ -67,8 +76,8 @@ struct dns_catz_zone {
        isc_timer_t             *updatetimer;
        isc_event_t             updateevent;
 
-       bool            active;
-       bool            db_registered;
+       bool                    active;
+       bool                    db_registered;
 
        isc_refcount_t          refs;
 };
@@ -84,6 +93,7 @@ catz_process_zones_suboption(dns_catz_zone_t *zone, dns_rdataset_t *value,
  * Collection of catalog zones for a view
  */
 struct dns_catz_zones {
+       unsigned int                    magic;
        isc_ht_t                        *zones;
        isc_mem_t                       *mctx;
        isc_refcount_t                  refs;
@@ -97,6 +107,9 @@ struct dns_catz_zones {
 
 void
 dns_catz_options_init(dns_catz_options_t *options) {
+
+       REQUIRE(options != NULL);
+
        dns_ipkeylist_init(&options->masters);
 
        options->allow_query = NULL;
@@ -112,6 +125,10 @@ dns_catz_options_init(dns_catz_options_t *options) {
 
 void
 dns_catz_options_free(dns_catz_options_t *options, isc_mem_t *mctx) {
+
+       REQUIRE(options != NULL);
+       REQUIRE(mctx != NULL);
+
        if (options->masters.count != 0)
                dns_ipkeylist_clear(mctx, &options->masters);
        if (options->zonedir != NULL) {
@@ -128,6 +145,7 @@ isc_result_t
 dns_catz_options_copy(isc_mem_t *mctx, const dns_catz_options_t *src,
                      dns_catz_options_t *dst)
 {
+       REQUIRE(mctx != NULL);
        REQUIRE(src != NULL);
        REQUIRE(dst != NULL);
        REQUIRE(dst->masters.count == 0);
@@ -158,6 +176,10 @@ isc_result_t
 dns_catz_options_setdefault(isc_mem_t *mctx, const dns_catz_options_t *defaults,
                            dns_catz_options_t *opts)
 {
+       REQUIRE(mctx != NULL);
+       REQUIRE(defaults != NULL);
+       REQUIRE(opts != NULL);
+
        if (opts->masters.count == 0 && defaults->masters.count != 0)
                dns_ipkeylist_copy(mctx, &defaults->masters, &opts->masters);
 
@@ -182,6 +204,7 @@ dns_catz_entry_new(isc_mem_t *mctx, const dns_name_t *domain,
        dns_catz_entry_t *nentry;
        isc_result_t result;
 
+       REQUIRE(mctx != NULL);
        REQUIRE(nentryp != NULL && *nentryp == NULL);
 
        nentry = isc_mem_get(mctx, sizeof(dns_catz_entry_t));
@@ -197,6 +220,7 @@ dns_catz_entry_new(isc_mem_t *mctx, const dns_name_t *domain,
 
        dns_catz_options_init(&nentry->opts);
        isc_refcount_init(&nentry->refs, 1);
+       nentry->magic = DNS_CATZ_ENTRY_MAGIC;
        *nentryp = nentry;
        return (ISC_R_SUCCESS);
 
@@ -207,6 +231,7 @@ cleanup:
 
 dns_name_t *
 dns_catz_entry_getname(dns_catz_entry_t *entry) {
+       REQUIRE(DNS_CATZ_ENTRY_VALID(entry));
        return (&entry->name);
 }
 
@@ -217,6 +242,10 @@ dns_catz_entry_copy(dns_catz_zone_t *zone, const dns_catz_entry_t *entry,
        isc_result_t result;
        dns_catz_entry_t *nentry = NULL;
 
+       REQUIRE(DNS_CATZ_ZONE_VALID(zone));
+       REQUIRE(DNS_CATZ_ENTRY_VALID(entry));
+       REQUIRE(nentryp != NULL && *nentryp == NULL);
+
        result = dns_catz_entry_new(zone->catzs->mctx, &entry->name, &nentry);
        if (result != ISC_R_SUCCESS)
                return (result);
@@ -232,7 +261,9 @@ dns_catz_entry_copy(dns_catz_zone_t *zone, const dns_catz_entry_t *entry,
 
 void
 dns_catz_entry_attach(dns_catz_entry_t *entry, dns_catz_entry_t **entryp) {
+       REQUIRE(DNS_CATZ_ENTRY_VALID(entry));
        REQUIRE(entryp != NULL && *entryp == NULL);
+
        isc_refcount_increment(&entry->refs, NULL);
        *entryp = entry;
 }
@@ -243,9 +274,11 @@ dns_catz_entry_detach(dns_catz_zone_t *zone, dns_catz_entry_t **entryp) {
        isc_mem_t *mctx;
        unsigned int refs;
 
+       REQUIRE(DNS_CATZ_ZONE_VALID(zone));
        REQUIRE(entryp != NULL && *entryp != NULL);
-
        entry = *entryp;
+       REQUIRE(DNS_CATZ_ENTRY_VALID(entry));
+
        *entryp = NULL;
 
        mctx = zone->catzs->mctx;
@@ -262,6 +295,7 @@ dns_catz_entry_detach(dns_catz_zone_t *zone, dns_catz_entry_t **entryp) {
 
 bool
 dns_catz_entry_validate(const dns_catz_entry_t *entry) {
+       REQUIRE(DNS_CATZ_ENTRY_VALID(entry));
        UNUSED(entry);
 
        return (true);
@@ -271,6 +305,9 @@ bool
 dns_catz_entry_cmp(const dns_catz_entry_t *ea, const dns_catz_entry_t *eb) {
        isc_region_t ra, rb;
 
+       REQUIRE(DNS_CATZ_ENTRY_VALID(ea));
+       REQUIRE(DNS_CATZ_ENTRY_VALID(eb));
+
        if (ea == eb)
                return (true);
 
@@ -311,21 +348,21 @@ dns_catz_entry_cmp(const dns_catz_entry_t *ea, const dns_catz_entry_t *eb) {
 
 dns_name_t *
 dns_catz_zone_getname(dns_catz_zone_t *zone) {
-       REQUIRE(zone != NULL);
+       REQUIRE(DNS_CATZ_ZONE_VALID(zone));
 
        return (&zone->name);
 }
 
 dns_catz_options_t *
 dns_catz_zone_getdefoptions(dns_catz_zone_t *zone) {
-       REQUIRE(zone != NULL);
+       REQUIRE(DNS_CATZ_ZONE_VALID(zone));
 
        return (&zone->defoptions);
 }
 
 void
 dns_catz_zone_resetdefoptions(dns_catz_zone_t *zone) {
-       REQUIRE(zone != NULL);
+       REQUIRE(DNS_CATZ_ZONE_VALID(zone));
 
        dns_catz_options_free(&zone->defoptions, zone->catzs->mctx);
        dns_catz_options_init(&zone->defoptions);
@@ -342,8 +379,8 @@ dns_catz_zones_merge(dns_catz_zone_t *target, dns_catz_zone_t *newzone) {
        char zname[DNS_NAME_FORMATSIZE];
        dns_catz_zoneop_fn_t addzone, modzone, delzone;
 
-       REQUIRE(target != NULL);
-       REQUIRE(newzone != NULL);
+       REQUIRE(DNS_CATZ_ZONE_VALID(newzone));
+       REQUIRE(DNS_CATZ_ZONE_VALID(target));
 
        /* TODO verify the new zone first! */
 
@@ -398,9 +435,9 @@ dns_catz_zones_merge(dns_catz_zone_t *target, dns_catz_zone_t *newzone) {
             result = delcur ? isc_ht_iter_delcurrent_next(iter1) :
                             isc_ht_iter_next(iter1))
        {
-               dns_catz_entry_t *nentry;
-               dns_catz_entry_t *oentry;
-               unsigned char * key;
+               dns_catz_entry_t *nentry = NULL;
+               dns_catz_entry_t *oentry = NULL;
+               unsigned char * key = NULL;
                size_t keysize;
                delcur = false;
 
@@ -471,7 +508,7 @@ dns_catz_zones_merge(dns_catz_zone_t *target, dns_catz_zone_t *newzone) {
             result == ISC_R_SUCCESS;
             result = isc_ht_iter_delcurrent_next(iter2))
        {
-               dns_catz_entry_t *entry;
+               dns_catz_entry_t *entry = NULL;
                isc_ht_iter_current(iter2, (void **) &entry);
 
                dns_name_format(&entry->name, zname, DNS_NAME_FORMATSIZE);
@@ -494,7 +531,7 @@ dns_catz_zones_merge(dns_catz_zone_t *target, dns_catz_zone_t *newzone) {
             result == ISC_R_SUCCESS;
             result = isc_ht_iter_delcurrent_next(iteradd))
        {
-               dns_catz_entry_t *entry;
+               dns_catz_entry_t *entry = NULL;
                isc_ht_iter_current(iteradd, (void **) &entry);
 
                dns_name_format(&entry->name, zname, DNS_NAME_FORMATSIZE);
@@ -513,7 +550,7 @@ dns_catz_zones_merge(dns_catz_zone_t *target, dns_catz_zone_t *newzone) {
             result == ISC_R_SUCCESS;
             result = isc_ht_iter_delcurrent_next(itermod))
        {
-               dns_catz_entry_t *entry;
+               dns_catz_entry_t *entry = NULL;
                isc_ht_iter_current(itermod, (void **) &entry);
 
                dns_name_format(&entry->name, zname, DNS_NAME_FORMATSIZE);
@@ -547,7 +584,6 @@ cleanup:
        if (tomod != NULL)
                isc_ht_destroy(&tomod);
        return (result);
-
 }
 
 isc_result_t
@@ -586,6 +622,7 @@ dns_catz_new_zones(dns_catz_zones_t **catzsp, dns_catz_zonemodmethods_t *zmm,
        result = isc_task_create(taskmgr, 0, &new_zones->updater);
        if (result != ISC_R_SUCCESS)
                goto cleanup_ht;
+       new_zones->magic = DNS_CATZ_ZONES_MAGIC;
 
        *catzsp = new_zones;
        return (ISC_R_SUCCESS);
@@ -604,7 +641,7 @@ dns_catz_new_zones(dns_catz_zones_t **catzsp, dns_catz_zonemodmethods_t *zmm,
 
 void
 dns_catz_catzs_set_view(dns_catz_zones_t *catzs, dns_view_t *view) {
-       REQUIRE(catzs != NULL);
+       REQUIRE(DNS_CATZ_ZONES_VALID(catzs));
        REQUIRE(view != NULL);
        /* Either it's a new one or it's being reconfigured. */
        REQUIRE(catzs->view == NULL || !strcmp(catzs->view->name, view->name));
@@ -619,7 +656,9 @@ dns_catz_new_zone(dns_catz_zones_t *catzs, dns_catz_zone_t **zonep,
        isc_result_t result;
        dns_catz_zone_t *new_zone;
 
+       REQUIRE(DNS_CATZ_ZONES_VALID(catzs));
        REQUIRE(zonep != NULL && *zonep == NULL);
+       REQUIRE(ISC_MAGIC_VALID(name, DNS_NAME_MAGIC));
 
        new_zone = isc_mem_get(catzs->mctx, sizeof(*new_zone));
        if (new_zone == NULL)
@@ -656,6 +695,7 @@ dns_catz_new_zone(dns_catz_zones_t *catzs, dns_catz_zone_t **zonep,
        new_zone->db_registered = false;
        new_zone->version = (uint32_t)(-1);
        isc_refcount_init(&new_zone->refs, 1);
+       new_zone->magic = DNS_CATZ_ZONE_MAGIC;
 
        *zonep = new_zone;
 
@@ -679,9 +719,10 @@ dns_catz_add_zone(dns_catz_zones_t *catzs, const dns_name_t *name,
        isc_result_t result, tresult;
        char zname[DNS_NAME_FORMATSIZE];
 
-       REQUIRE(catzs != NULL);
-       REQUIRE(name != NULL);
+       REQUIRE(DNS_CATZ_ZONES_VALID(catzs));
+       REQUIRE(ISC_MAGIC_VALID(name, DNS_NAME_MAGIC));
        REQUIRE(zonep != NULL && *zonep == NULL);
+
        dns_name_format(name, zname, DNS_NAME_FORMATSIZE);
        isc_log_write(dns_lctx, DNS_LOGCATEGORY_GENERAL,
                      DNS_LOGMODULE_MASTER, ISC_LOG_DEBUG(3),
@@ -719,7 +760,10 @@ dns_catz_add_zone(dns_catz_zones_t *catzs, const dns_name_t *name,
 dns_catz_zone_t *
 dns_catz_get_zone(dns_catz_zones_t *catzs, const dns_name_t *name) {
        isc_result_t result;
-       dns_catz_zone_t *found;
+       dns_catz_zone_t *found = NULL;
+
+       REQUIRE(DNS_CATZ_ZONES_VALID(catzs));
+       REQUIRE(ISC_MAGIC_VALID(name, DNS_NAME_MAGIC));
 
        result = isc_ht_find(catzs->zones, name->ndata, name->length,
                             (void **) &found);
@@ -731,6 +775,7 @@ dns_catz_get_zone(dns_catz_zones_t *catzs, const dns_name_t *name) {
 
 void
 dns_catz_catzs_attach(dns_catz_zones_t *catzs, dns_catz_zones_t **catzsp) {
+       REQUIRE(DNS_CATZ_ZONES_VALID(catzs));
        REQUIRE(catzsp != NULL && *catzsp == NULL);
 
        isc_refcount_increment(&catzs->refs, NULL);
@@ -750,7 +795,6 @@ dns_catz_zone_detach(dns_catz_zone_t **zonep) {
        isc_result_t result;
        dns_catz_zone_t *zone;
        isc_ht_iter_t *iter = NULL;
-       isc_mem_t *mctx;
        unsigned int refs;
 
        REQUIRE(zonep != NULL && *zonep != NULL);
@@ -759,6 +803,7 @@ dns_catz_zone_detach(dns_catz_zone_t **zonep) {
        *zonep = NULL;
        isc_refcount_decrement(&zone->refs, &refs);
        if (refs == 0) {
+               isc_mem_t *mctx = zone->catzs->mctx;
                if (zone->entries != NULL) {
                        result = isc_ht_iter_create(zone->entries, &iter);
                        INSIST(result == ISC_R_SUCCESS);
@@ -766,7 +811,7 @@ dns_catz_zone_detach(dns_catz_zone_t **zonep) {
                             result == ISC_R_SUCCESS;
                             result = isc_ht_iter_delcurrent_next(iter))
                        {
-                               dns_catz_entry_t *entry;
+                               dns_catz_entry_t *entry = NULL;
 
                                isc_ht_iter_current(iter, (void **) &entry);
                                dns_catz_entry_detach(zone, &entry);
@@ -778,7 +823,7 @@ dns_catz_zone_detach(dns_catz_zone_t **zonep) {
                        INSIST(isc_ht_count(zone->entries) == 0);
                        isc_ht_destroy(&zone->entries);
                }
-               mctx = zone->catzs->mctx;
+               zone->magic = 0;
                isc_timer_detach(&zone->updatetimer);
                isc_refcount_destroy(&zone->refs);
                if (zone->db_registered == true) {
@@ -803,22 +848,21 @@ dns_catz_zone_detach(dns_catz_zone_t **zonep) {
 }
 
 void
-dns_catz_catzs_detach(dns_catz_zones_t ** catzsp) {
+dns_catz_catzs_detach(dns_catz_zones_t **catzsp) {
        dns_catz_zones_t *catzs;
        isc_ht_iter_t *iter = NULL;
        isc_result_t result;
        unsigned int refs;
-       dns_catz_zone_t *zone;
-
 
        REQUIRE(catzsp != NULL);
        catzs = *catzsp;
-       REQUIRE(catzs != NULL);
+       REQUIRE(DNS_CATZ_ZONES_VALID(catzs));
 
        *catzsp = NULL;
        isc_refcount_decrement(&catzs->refs, &refs);
 
        if (refs == 0) {
+               catzs->magic = 0;
                DESTROYLOCK(&catzs->lock);
                if (catzs->zones != NULL) {
                        result = isc_ht_iter_create(catzs->zones, &iter);
@@ -826,6 +870,7 @@ dns_catz_catzs_detach(dns_catz_zones_t ** catzsp) {
                        for (result = isc_ht_iter_first(iter);
                             result == ISC_R_SUCCESS;)
                        {
+                               dns_catz_zone_t *zone = NULL;
                                isc_ht_iter_current(iter, (void **) &zone);
                                result = isc_ht_iter_delcurrent_next(iter);
                                dns_catz_zone_detach(&zone);
@@ -883,9 +928,9 @@ catz_process_zones(dns_catz_zone_t *zone, dns_rdataset_t *value,
        dns_label_t mhash;
        dns_name_t opt;
 
-       REQUIRE(zone != NULL);
+       REQUIRE(DNS_CATZ_ZONE_VALID(zone));
        REQUIRE(DNS_RDATASET_VALID(value));
-       REQUIRE(name != NULL);
+       REQUIRE(ISC_MAGIC_VALID(name, DNS_NAME_MAGIC));
 
        if (value->rdclass != dns_rdataclass_in)
                return (ISC_R_FAILURE);
@@ -976,7 +1021,7 @@ catz_process_version(dns_catz_zone_t *zone, dns_rdataset_t *value) {
        uint32_t tversion;
        char t[16];
 
-       REQUIRE(zone != NULL);
+       REQUIRE(DNS_CATZ_ZONE_VALID(zone));
        REQUIRE(DNS_RDATASET_VALID(value));
 
        if (value->rdclass != dns_rdataclass_in ||
@@ -1041,11 +1086,11 @@ catz_process_masters(dns_catz_zone_t *zone, dns_ipkeylist_t *ipkl,
        unsigned int rcount;
        unsigned int i;
 
-       REQUIRE(zone != NULL);
+       REQUIRE(DNS_CATZ_ZONE_VALID(zone));
        REQUIRE(ipkl != NULL);
        REQUIRE(DNS_RDATASET_VALID(value));
        REQUIRE(dns_rdataset_isassociated(value));
-       REQUIRE(name != NULL);
+       REQUIRE(ISC_MAGIC_VALID(name, DNS_NAME_MAGIC));
 
        mctx = zone->catzs->mctx;
        memset(&rdata_a, 0, sizeof(rdata_a));
@@ -1225,7 +1270,7 @@ catz_process_apl(dns_catz_zone_t *zone, isc_buffer_t **aclbp,
        isc_buffer_t *aclb = NULL;
        unsigned char buf[256]; /* larger than INET6_ADDRSTRLEN */
 
-       REQUIRE(zone != NULL);
+       REQUIRE(DNS_CATZ_ZONE_VALID(zone));
        REQUIRE(aclbp != NULL);
        REQUIRE(*aclbp == NULL);
        REQUIRE(DNS_RDATASET_VALID(value));
@@ -1302,9 +1347,10 @@ catz_process_zones_suboption(dns_catz_zone_t *zone, dns_rdataset_t *value,
        dns_name_t prefix;
        catz_opt_t opt;
 
-       REQUIRE(zone != NULL);
+       REQUIRE(DNS_CATZ_ZONE_VALID(zone));
        REQUIRE(mhash != NULL);
        REQUIRE(DNS_RDATASET_VALID(value));
+       REQUIRE(ISC_MAGIC_VALID(name, DNS_NAME_MAGIC));
 
        if (name->labels == 0)
                return (ISC_R_FAILURE);
@@ -1360,8 +1406,8 @@ catz_process_value(dns_catz_zone_t *zone, dns_name_t *name,
        dns_name_t prefix;
        catz_opt_t opt;
 
-       REQUIRE(zone != NULL);
-       REQUIRE(name != NULL);
+       REQUIRE(DNS_CATZ_ZONE_VALID(zone));
+       REQUIRE(ISC_MAGIC_VALID(name, DNS_NAME_MAGIC));
        REQUIRE(DNS_RDATASET_VALID(rdataset));
 
        dns_name_getlabel(name, name->labels - 1, &option);
@@ -1406,8 +1452,9 @@ dns_catz_update_process(dns_catz_zones_t *catzs, dns_catz_zone_t *zone,
        dns_rdata_soa_t soa;
        dns_name_t prefix;
 
-       REQUIRE(catzs != NULL);
-       REQUIRE(zone != NULL);
+       REQUIRE(DNS_CATZ_ZONES_VALID(catzs));
+       REQUIRE(DNS_CATZ_ZONE_VALID(zone));
+       REQUIRE(ISC_MAGIC_VALID(src_name, DNS_NAME_MAGIC));
 
        nrres = dns_name_fullcompare(src_name, &zone->name, &order, &nlabels);
        if (nrres == dns_namereln_equal) {
@@ -1451,7 +1498,7 @@ dns_catz_generate_masterfilename(dns_catz_zone_t *zone, dns_catz_entry_t *entry,
        isc_result_t result;
        size_t rlen;
 
-       REQUIRE(zone != NULL);
+       REQUIRE(DNS_CATZ_ZONE_VALID(zone));
        REQUIRE(entry != NULL);
        REQUIRE(buffer != NULL && *buffer != NULL);
 
@@ -1528,7 +1575,7 @@ dns_catz_generate_zonecfg(dns_catz_zone_t *zone, dns_catz_entry_t *entry,
        char pbuf[sizeof("65535")]; /* used both for port number and DSCP */
        char zname[DNS_NAME_FORMATSIZE];
 
-       REQUIRE(zone != NULL);
+       REQUIRE(DNS_CATZ_ZONE_VALID(zone));
        REQUIRE(entry != NULL);
        REQUIRE(buf != NULL && *buf == NULL);
 
@@ -1640,7 +1687,7 @@ dns_catz_update_taskaction(isc_task_t *task, isc_event_t *event) {
 
        REQUIRE(event != NULL);
        zone = event->ev_arg;
-       REQUIRE(zone != NULL);
+       REQUIRE(DNS_CATZ_ZONE_VALID(zone));
 
        LOCK(&zone->catzs->lock);
        zone->updatepending = false;
@@ -1752,7 +1799,7 @@ dns_catz_update_from_db(dns_db_t *db, dns_catz_zones_t *catzs) {
        uint32_t vers;
 
        REQUIRE(DNS_DB_VALID(db));
-       REQUIRE(catzs != NULL);
+       REQUIRE(DNS_CATZ_ZONES_VALID(catzs));
 
        /*
         * Create a new catz in the same context as current catz.
@@ -1925,9 +1972,8 @@ void
 dns_catz_prereconfig(dns_catz_zones_t *catzs) {
        isc_result_t result;
        isc_ht_iter_t *iter = NULL;
-       dns_catz_zone_t *zone;
 
-       REQUIRE(catzs != NULL);
+       REQUIRE(DNS_CATZ_ZONES_VALID(catzs));
 
        result = isc_ht_iter_create(catzs->zones, &iter);
        INSIST(result == ISC_R_SUCCESS);
@@ -1935,6 +1981,7 @@ dns_catz_prereconfig(dns_catz_zones_t *catzs) {
             result == ISC_R_SUCCESS;
             result = isc_ht_iter_next(iter))
        {
+               dns_catz_zone_t *zone = NULL;
                isc_ht_iter_current(iter, (void **) &zone);
                zone->active = false;
        }
@@ -1947,7 +1994,8 @@ dns_catz_postreconfig(dns_catz_zones_t *catzs) {
        isc_result_t result;
        dns_catz_zone_t *newzone = NULL;
        isc_ht_iter_t *iter = NULL;
-       dns_catz_zone_t *zone;
+
+       REQUIRE(DNS_CATZ_ZONES_VALID(catzs));
 
        LOCK(&catzs->lock);
        result = isc_ht_iter_create(catzs->zones, &iter);
@@ -1955,6 +2003,8 @@ dns_catz_postreconfig(dns_catz_zones_t *catzs) {
        for (result = isc_ht_iter_first(iter);
             result == ISC_R_SUCCESS;)
        {
+               dns_catz_zone_t *zone = NULL;
+
                isc_ht_iter_current(iter, (void **) &zone);
                if (zone->active == false) {
                        char cname[DNS_NAME_FORMATSIZE];
@@ -1990,5 +2040,6 @@ dns_catz_postreconfig(dns_catz_zones_t *catzs) {
 
 isc_result_t
 dns_catz_get_iterator(dns_catz_zone_t *catz, isc_ht_iter_t **itp) {
+       REQUIRE(DNS_CATZ_ZONE_VALID(catz));
        return (isc_ht_iter_create(catz->entries, itp));
 }
index 61426f7d4860210f30f86f30773f0214d8bcb82c..df087a6175c176ed19a8027b82f0f84440185692 100644 (file)
@@ -77,7 +77,7 @@ dns_catz_options_init(dns_catz_options_t *options);
  * Initialize 'options' to NULL values.
  *
  * Requires:
- * \li options to be non NULL
+ * \li 'options' to be non NULL.
  */
 
 void
@@ -86,20 +86,20 @@ dns_catz_options_free(dns_catz_options_t *options, isc_mem_t *mctx);
  * Free 'options' contents into 'mctx'. ('options' itself is not freed.)
  *
  * Requires:
- * \li options to be non NULL
- * \li mctx to be a valid memory context
+ * \li 'options' to be non NULL.
+ * \li 'mctx' to be a valid memory context.
  */
 
 isc_result_t
 dns_catz_options_copy(isc_mem_t *mctx, const dns_catz_options_t *opts,
                      dns_catz_options_t *nopts);
 /*%<
- * Duplicate 'opts' into 'nopts', allocating space from 'mctx'
+ * Duplicate 'opts' into 'nopts', allocating space from 'mctx'.
  *
  * Requires:
- * \li 'mctx' to be a valid memory context
- * \li 'options' to be non NULL and valid options
- * \li 'nopts' to be non NULL
+ * \li 'mctx' to be a valid memory context.
+ * \li 'options' to be non NULL and valid options.
+ * \li 'nopts' to be non NULL.
  */
 
 isc_result_t
@@ -109,9 +109,9 @@ dns_catz_options_setdefault(isc_mem_t *mctx, const dns_catz_options_t *defaults,
  * Replace empty values in 'opts' with values from 'defaults'
  *
  * Requires:
- * \li mctx to be a valid memory context
- * \li defaults to be non NULL and valid options
- * \li opts to be non NULL
+ * \li 'mctx' to be a valid memory context.
+ * \li 'defaults' to be non NULL and valid options.
+ * \li 'opts' to be non NULL.
  */
 
 dns_name_t *
@@ -120,10 +120,10 @@ dns_catz_entry_getname(dns_catz_entry_t *entry);
  * Get domain name for 'entry'
  *
  * Requires:
- * \li entry to be non NULL
+ * \li 'entry' to be non NULL.
  *
  * Returns:
- * \li domain name for entry
+ * \li domain name for entry.
  */
 
 isc_result_t
@@ -133,9 +133,9 @@ dns_catz_entry_new(isc_mem_t *mctx, const dns_name_t *domain,
  * Allocate a new catz_entry on 'mctx', with the name 'domain'
  *
  * Requires:
- * \li mctx to be a valid memory context
- * \li domain to be valid dns_name or NULL
- * \li nentryp to be non NULL, *nentryp to be NULL
+ * \li 'mctx' to be a valid memory context.
+ * \li 'domain' to be valid dns_name or NULL.
+ * \li 'nentryp' to be non NULL, *nentryp to be NULL.
  *
  * Returns:
  * \li ISC_R_SUCCESS on success
@@ -149,9 +149,9 @@ dns_catz_entry_copy(dns_catz_zone_t *zone, const dns_catz_entry_t *entry,
  * Allocate a new catz_entry and deep copy 'entry' into 'nentryp'.
  *
  * Requires:
- * \li mctx to be a valid memory context
- * \li entry to be non NULL
- * \li nentryp to be non NULL, *nentryp to be NULL
+ * \li 'mctx' to be a valid memory context.
+ * \li 'entry' to be non NULL.
+ * \li 'nentryp' to be non NULL, *nentryp to be NULL.
  *
  * Returns:
  * \li ISC_R_SUCCESS on success
@@ -164,8 +164,8 @@ dns_catz_entry_attach(dns_catz_entry_t *entry, dns_catz_entry_t **entryp);
  * Attach an entry
  *
  * Requires:
- * \li entry is not NULL
- * \li entryp is not NULL, *entryp is NULL
+ * \li 'entry' is a valid dns_catz_entry_t.
+ * \li 'entryp' is not NULL and '*entryp' is NULL.
  */
 
 void
@@ -174,8 +174,8 @@ dns_catz_entry_detach(dns_catz_zone_t *zone, dns_catz_entry_t **entryp);
  * Detach an entry, free if no further references
  *
  * Requires:
- * \li zone is not NULL
- * \li entryp is not NULL, *entryp is not NULL
+ * \li 'zone' is a valid dns_catz_zone_t.
+ * \li 'entryp' is not NULL and '*entryp' is not NULL.
  */
 
 bool
@@ -183,6 +183,9 @@ dns_catz_entry_validate(const dns_catz_entry_t *entry);
 /*%<
  * Validate whether entry is correct.
  * (NOT YET IMPLEMENTED: always returns true)
+ *
+ * Requires:
+ *\li  'entry' is a valid dns_catz_entry_t.
  */
 
 bool
@@ -191,12 +194,12 @@ dns_catz_entry_cmp(const dns_catz_entry_t *ea, const dns_catz_entry_t *eb);
  * Deep compare two entries
  *
  * Requires:
- * \li ea is not NULL
- * \li eb is not NULL
+ * \li 'ea' is a valid dns_catz_entry_t.
+ * \li 'eb' is a valid dns_catz_entry_t.
  *
  * Returns:
- * \li true if entries are the same
- * \li false if the entries differ
+ * \li 'true' if entries are the same.
+ * \li 'false' if the entries differ.
  */
 
 void
@@ -205,8 +208,8 @@ dns_catz_zone_attach(dns_catz_zone_t *zone, dns_catz_zone_t **zonep);
  * Attach a catzone
  *
  * Requires:
- * \li zone is not NULL
- * \li zonep is not NULL, *zonep is NULL
+ * \li 'zone' is a valid dns_catz_zone_t.
+ * \li 'zonep' is not NULL and '*zonep' is NULL.
  */
 
 void
@@ -215,7 +218,7 @@ dns_catz_zone_detach(dns_catz_zone_t** zonep);
  * Detach a zone, free if no further references
  *
  * Requires:
- * \li zonep is not NULL, *zonep is not NULL
+ * \li 'zonep' is not NULL and '*zonep' is not NULL.
  */
 
 isc_result_t
@@ -225,9 +228,9 @@ dns_catz_new_zone(dns_catz_zones_t *catzs, dns_catz_zone_t **zonep,
  * Allocate a new catz zone on catzs mctx
  *
  * Requires:
- * \li catzs is not NULL
- * \li zonep is not NULL, *zonep is NULL
- * \li name is not NULL
+ * \li 'catzs' is a valid dns_catz_zones_t.
+ * \li 'zonep' is not NULL and '*zonep' is NULL.
+ * \li 'name' is a valid dns_name_t.
  *
  */
 
@@ -237,7 +240,7 @@ dns_catz_zone_getname(dns_catz_zone_t *zone);
  * Get catalog zone name
  *
  * Requires:
- * \li zone is not NULL
+ * \li 'zone' is a valid dns_catz_zone_t.
  */
 
 dns_catz_options_t *
@@ -246,7 +249,7 @@ dns_catz_zone_getdefoptions(dns_catz_zone_t *zone);
  * Get default member zone options for catalog zone 'zone'
  *
  * Requires:
- * \li zone is not NULL
+ * \li 'zone' is a valid dns_catz_zone_t.
  */
 
 void
@@ -256,7 +259,7 @@ dns_catz_zone_resetdefoptions(dns_catz_zone_t *zone);
  * the default values.
  *
  * Requires:
- * \li zone is not NULL
+ * \li 'zone' is a valid dns_catz_zone_t.
  */
 
 isc_result_t
@@ -266,8 +269,8 @@ dns_catz_zones_merge(dns_catz_zone_t *target, dns_catz_zone_t *newzone);
  * (from zone->catzs->zmm) for appropriate member zones.
  *
  * Requires:
- * \li orig is not NULL
- * \li newzone is not NULL, *newzone is not NULL
+ * \li 'orig' is a valid dns_catz_zone_t.
+ * \li 'newzone' is not NULL and '*newzone' is not NULL.
  *
  */
 
@@ -279,10 +282,10 @@ dns_catz_update_process(dns_catz_zones_t *catzs, dns_catz_zone_t *zone,
  * record name.
  *
  * Requires:
- * \li catzs is not NULL
- * \li zone is not NULL
- * \li src_name is not NULL
- * \li rdataset is valid
+ * \li 'catzs' is a valid dns_catz_zones_t.
+ * \li 'zone' is a valid dns_catz_zone_t.
+ * \li 'src_name' is a valid dns_name_t.
+ * \li 'rdataset' is valid rdataset.
  */
 
 isc_result_t
@@ -296,9 +299,9 @@ dns_catz_generate_masterfilename(dns_catz_zone_t *zone, dns_catz_entry_t *entry,
  * __catz__unique_hash_generated_from_the_above.db
  *
  * Requires:
- * \li zone is not NULL
- * \li entry is not NULL
- * \li buffer is not NULL and *buffer is not NULL
+ * \li 'zone' is a valid dns_catz_zone_t.
+ * \li 'entry' is a valid dns_catz_entry_t.
+ * \li 'buffer' is not NULL and '*buffer' is not NULL.
  */
 
 isc_result_t
@@ -309,10 +312,9 @@ dns_catz_generate_zonecfg(dns_catz_zone_t *zone, dns_catz_entry_t *entry,
  * it into *buf. buf might be reallocated.
  *
  * Requires:
- * \li zone is not NULL
- * \li entry is not NULL
- * \li buf is not NULL
- * \li *buf is NULL
+ * \li 'zone' is a valid dns_catz_zone_t.
+ * \li 'entry' is a valid dns_catz_entry_t.
+ * \li 'buf' is not NULL and '*buf' is NULL.
  *
  */
 
@@ -339,8 +341,8 @@ dns_catz_new_zones(dns_catz_zones_t **catzsp, dns_catz_zonemodmethods_t *zmm,
  * for a view.
  *
  * Requires:
- * \li catzsp is not NULL, *catzsp is NULL
- * \li zmm is not NULL
+ * \li 'catzsp' is not NULL and '*catzsp' is NULL.
+ * \li 'zmm' is not NULL.
  *
  */
 
@@ -351,9 +353,9 @@ dns_catz_add_zone(dns_catz_zones_t *catzs, const dns_name_t *name,
  * Allocate a new catz named 'name' and put it in 'catzs' collection.
  *
  * Requires:
- * \li catzs is not NULL
- * \li name is not NULL
- * \li zonep is not NULL, *zonep is NULL
+ * \li 'catzs' is a valid dns_catz_zones_t.
+ * \li 'name' is a valid dns_name_t.
+ * \li 'zonep' is not NULL and *zonep is NULL.
  *
  */
 
@@ -363,37 +365,37 @@ dns_catz_get_zone(dns_catz_zones_t *catzs, const dns_name_t *name);
  * Returns a zone named 'name' from collection 'catzs'
  *
  * Requires:
- * \li catzs is not NULL
- * \li name is not NULL
+ * \li 'catzs' is a valid dns_catz_zones_t.
+ * \li 'name' is a valid dns_name_t.
  */
 
 void
 dns_catz_catzs_attach(dns_catz_zones_t *catzs, dns_catz_zones_t **catzsp);
 /*%<
- * Attach 'catzs' to 'catzsp'
+ * Attach 'catzs' to 'catzsp'.
  *
  * Requires:
- * \li catzs is not NULL
- * \li catzsp is not NULL, *catzsp is NULL
+ * \li 'catzs' is a valid dns_catz_zones_t.
+ * \li 'catzsp' is not NULL and *catzsp is NULL.
  */
 
 void
 dns_catz_catzs_detach(dns_catz_zones_t **catzsp);
 /*%<
- * Detach 'catzsp', free if no further references
+ * Detach 'catzsp', free if no further references.
  *
  * Requires:
- * \li catzsp is not NULL, *catzsp is not NULL
+ * \li 'catzsp' is not NULL and *catzsp is not NULL.
  */
 
 void
 dns_catz_catzs_set_view(dns_catz_zones_t *catzs, dns_view_t *view);
 /*%<
- * Set a view for catzs
+ * Set a view for 'catzs'.
  *
  * Requires:
- * \li catzs is not NULL
- * \li catzs->view is NULL or catzs->view == view
+ * \li 'catzs' is a valid dns_catz_zones_t.
+ * \li 'catzs->view' is NULL or 'catzs->view' == 'view'.
  */
 
 
@@ -408,17 +410,17 @@ dns_catz_dbupdate_callback(dns_db_t *db, void *fn_arg);
  * If there is an update scheduled it replaces old db version with a new one.
  *
  * Requires:
- * \li db is a valid database
- * \li fn_arg is not NULL (casted to dns_catz_zones_t*)
+ * \li 'db' is a valid database.
+ * \li 'fn_arg' is not NULL (casted to dns_catz_zones_t*).
  */
 
 void
 dns_catz_update_taskaction(isc_task_t *task, isc_event_t *event);
 /*%<
- * Task that launches dns_catz_update_from_db
+ * Task that launches dns_catz_update_from_db.
  *
  * Requires:
- * \li event is not NULL
+ * \li 'event' is not NULL.
  */
 
 void
@@ -429,8 +431,8 @@ dns_catz_update_from_db(dns_db_t *db, dns_catz_zones_t *catzs);
  * then merges new catz into old catz.
  *
  * Requires:
- * \li db is a valid DB
- * \li catzs is not NULL
+ * \li 'db' is a valid DB.
+ * \li 'catzs' is a valid dns_catz_zones_t.
  *
  */
 
@@ -440,7 +442,7 @@ dns_catz_prereconfig(dns_catz_zones_t *catzs);
  * Called before reconfig, clears 'active' flag on all the zones in set
  *
  * Requires:
- * \li catzs is not NULL
+ * \li 'catzs' is a valid dns_catz_zones_t.
  *
  */
 
@@ -451,7 +453,7 @@ dns_catz_postreconfig(dns_catz_zones_t *catzs);
  * inactive and force reload of those with changed configuration.
  *
  * Requires:
- * \li catzs is not NULL
+ * \li 'catzs' is a valid dns_catz_zones_t.
  */
 
 isc_result_t
@@ -459,6 +461,10 @@ dns_catz_get_iterator(dns_catz_zone_t *catz, isc_ht_iter_t **itp);
 /*%<
  * Get the hashtable iterator on catalog zone members, point '*itp' to it.
  *
+ * Requires:
+ * \li 'catzs' is a valid dns_catz_zones_t.
+ * \li 'itp' is not NULL and '*itp' is NULL.
+ *
  * Returns:
  * \li #ISC_R_SUCCESS          -- success
  * \li Any other value         -- failure
index b3c6825f1f85a9597d72aca62318ea1f53ad4fd7..d4d114ef40bc5e4107531fcb8cec239476a9019d 100644 (file)
@@ -162,7 +162,7 @@ isc_ht_find(const isc_ht_t *ht, const unsigned char *key,
 
        REQUIRE(ISC_HT_VALID(ht));
        REQUIRE(key != NULL && keysize > 0);
-       REQUIRE(valuep != NULL);
+       REQUIRE(valuep == NULL || *valuep == NULL);
 
        hash = isc_hash_function(key, keysize, true, NULL);
        node = ht->table[hash & ht->mask];
@@ -326,6 +326,8 @@ void
 isc_ht_iter_current(isc_ht_iter_t *it, void **valuep) {
        REQUIRE(it != NULL);
        REQUIRE(it->cur != NULL);
+       REQUIRE(valuep != NULL && *valuep == NULL);
+
        *valuep = it->cur->value;
 }
 
@@ -334,6 +336,8 @@ isc_ht_iter_currentkey(isc_ht_iter_t *it, unsigned char **key, size_t *keysize)
 {
        REQUIRE(it != NULL);
        REQUIRE(it->cur != NULL);
+       REQUIRE(key != NULL && *key == NULL);
+
        *key = it->cur->key;
        *keysize = it->cur->keysize;
 }
index b36d77f84b5147af3fba701456f4d5e6c4ca6d49..e1f42d910bcd81d0771de5edf83207a83a9e6d23 100644 (file)
@@ -27,10 +27,9 @@ typedef struct isc_ht_iter isc_ht_iter_t;
  * Initialize hashtable at *htp, using memory context and size of (1<<bits)
  *
  * Requires:
- *\li  htp is not NULL
- *\li  *htp is NULL
- *\li  mctx is a valid memory context
- *\li  bits >=1 && bits <=32
+ *\li  'htp' is not NULL and '*htp' is NULL.
+ *\li  'mctx' is a valid memory context.
+ *\li  'bits' >=1 and 'bits' <=32
  *
  * Returns:
  *\li  #ISC_R_NOMEMORY         -- not enough memory to create pool
@@ -43,7 +42,7 @@ isc_ht_init(isc_ht_t **htp, isc_mem_t *mctx, uint8_t bits);
  * Destroy hashtable, freeing everything
  *
  * Requires:
- * \li *htp is valid hashtable
+ * \li '*htp' is valid hashtable
  */
 void
 isc_ht_destroy(isc_ht_t **htp);
@@ -53,7 +52,7 @@ isc_ht_destroy(isc_ht_t **htp);
  * set its value to 'value'
  *
  * Requires:
- *\li  ht is a valid hashtable
+ *\li  'ht' is a valid hashtable
  *
  * Returns:
  *\li  #ISC_R_NOMEMORY         -- not enough memory to create pool
@@ -81,6 +80,7 @@ isc_ht_find(const isc_ht_t *ht, const unsigned char *key,
 
 /*%
  * Delete node from hashtable
+ *
  * Requires:
  *\li  ht is a valid hashtable
  *
@@ -93,12 +93,19 @@ isc_ht_delete(isc_ht_t *ht, const unsigned char *key, uint32_t keysize);
 
 /*%
  * Create an iterator for the hashtable; point '*itp' to it.
+ *
+ * Requires:
+ *\li  'ht' is a valid hashtable
+ *\li  'itp' is non NULL and '*itp' is NULL.
  */
 isc_result_t
 isc_ht_iter_create(isc_ht_t *ht, isc_ht_iter_t **itp);
 
 /*%
  * Destroy the iterator '*itp', set it to NULL
+ *
+ * Requires:
+ *\li  'itp' is non NULL and '*itp' is non NULL.
  */
 void
 isc_ht_iter_destroy(isc_ht_iter_t **itp);
@@ -106,6 +113,9 @@ isc_ht_iter_destroy(isc_ht_iter_t **itp);
 /*%
  * Set an iterator to the first entry.
  *
+ * Requires:
+ *\li  'it' is non NULL.
+ *
  * Returns:
  * \li         #ISC_R_SUCCESS  -- success
  * \li #ISC_R_NOMORE   -- no data in the hashtable
@@ -116,6 +126,9 @@ isc_ht_iter_first(isc_ht_iter_t *it);
 /*%
  * Set an iterator to the next entry.
  *
+ * Requires:
+ *\li  'it' is non NULL.
+ *
  * Returns:
  * \li         #ISC_R_SUCCESS  -- success
  * \li #ISC_R_NOMORE   -- end of hashtable reached
@@ -126,6 +139,9 @@ isc_ht_iter_next(isc_ht_iter_t *it);
 /*%
  * Delete current entry and set an iterator to the next entry.
  *
+ * Requires:
+ *\li  'it' is non NULL.
+ *
  * Returns:
  * \li         #ISC_R_SUCCESS  -- success
  * \li #ISC_R_NOMORE   -- end of hashtable reached
@@ -136,6 +152,10 @@ isc_ht_iter_delcurrent_next(isc_ht_iter_t *it);
 
 /*%
  * Set 'value' to the current value under the iterator
+ *
+ * Requires:
+ *\li  'it' is non NULL.
+ *\li   'valuep' is non NULL and '*valuep' is NULL.
  */
 void
 isc_ht_iter_current(isc_ht_iter_t *it, void **valuep);
@@ -143,6 +163,11 @@ isc_ht_iter_current(isc_ht_iter_t *it, void **valuep);
 /*%
  * Set 'key' and 'keysize to the current key and keysize for the value
  * under the iterator
+ *
+ * Requires:
+ *\li  'it' is non NULL.
+ *\li   'key' is non NULL and '*key' is NULL.
+ *\li  'keysize' is non NULL.
  */
 void
 isc_ht_iter_currentkey(isc_ht_iter_t *it, unsigned char **key, size_t *keysize);
index 39eaccd64eac3672443dc2a4cb111879b3b386d1..7f7afee0ebf9c35da4c8bc2a437ff7e662746c3c 100644 (file)
@@ -203,11 +203,9 @@ test_ht_iterator() {
        isc_mem_t *mctx = NULL;
        isc_ht_iter_t * iter = NULL;
        uintptr_t i;
-       void *v;
        uintptr_t count = 10000;
        uint32_t walked;
        unsigned char key[16];
-       unsigned char *tkey;
        size_t tksize;
 
        result = isc_mem_createx2(0, 0, default_memalloc, default_memfree,
@@ -236,6 +234,9 @@ test_ht_iterator() {
             result == ISC_R_SUCCESS;
             result = isc_ht_iter_next(iter))
        {
+               unsigned char *tkey = NULL;
+               void *v = NULL;
+
                isc_ht_iter_current(iter, &v);
                isc_ht_iter_currentkey(iter, &tkey, &tksize);
                assert_int_equal(tksize, 16);
@@ -252,6 +253,9 @@ test_ht_iterator() {
        walked = 0;
        result = isc_ht_iter_first(iter);
        while (result == ISC_R_SUCCESS) {
+               unsigned char *tkey = NULL;
+               void *v = NULL;
+
                isc_ht_iter_current(iter, &v);
                isc_ht_iter_currentkey(iter, &tkey, &tksize);
                assert_int_equal(tksize, 16);
@@ -273,6 +277,9 @@ test_ht_iterator() {
        walked = 0;
        result = isc_ht_iter_first(iter);
        while (result == ISC_R_SUCCESS) {
+               unsigned char *tkey = NULL;
+               void *v = NULL;
+
                isc_ht_iter_current(iter, &v);
                isc_ht_iter_currentkey(iter, &tkey, &tksize);
                assert_int_equal(tksize, 16);