]> git.ipfire.org Git - thirdparty/knot-dns.git/commitdiff
libknot/rrtype: improve unreliable parameters check
authorDaniel Salzman <daniel.salzman@nic.cz>
Sun, 21 Jan 2018 20:03:10 +0000 (21:03 +0100)
committerDaniel Salzman <daniel.salzman@nic.cz>
Sun, 21 Jan 2018 20:14:08 +0000 (21:14 +0100)
src/libknot/rdataset.h
src/libknot/rrtype/dnskey.h
src/libknot/rrtype/ds.h
src/libknot/rrtype/nsec.h
src/libknot/rrtype/nsec3.h
src/libknot/rrtype/nsec3param.h
src/libknot/rrtype/rdname.h
src/libknot/rrtype/rrsig.h
src/libknot/rrtype/soa.h

index a43256eea0f4b4accfa0528a8195180b5a9c6ee6..f2c43272b0d8122246d460c6c6e52e56ba276785 100644 (file)
@@ -1,4 +1,4 @@
-/*  Copyright (C) 2017 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz>
+/*  Copyright (C) 2018 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz>
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
@@ -24,6 +24,7 @@
 
 #pragma once
 
+#include <assert.h>
 #include <stddef.h>
 #include <stdint.h>
 #include <stdbool.h>
@@ -186,16 +187,15 @@ int knot_rdataset_subtract(knot_rdataset_t *from, const knot_rdataset_t *what,
 int knot_rdataset_sort_at(knot_rdataset_t *rrs, uint16_t pos, knot_mm_t *mm);
 
 /*! \brief Check helper. */
-#define KNOT_RDATASET_CHECK(rrs, pos, code) \
-       if (rrs == NULL || rrs->data == NULL || rrs->rr_count == 0 || \
-           pos >= rrs->rr_count) { \
-               code; \
-       }
+#define KNOT_RDATASET_CHECK(rrs, pos) \
+       assert(rrs && rrs->data && rrs->rr_count > 0 && pos < rrs->rr_count);
 
 /*! \brief Access helper. */
 static inline
-uint8_t *knot_rdata_offset(const knot_rdataset_t *rrs, uint16_t pos, uint16_t offset) {
+uint8_t *knot_rdata_offset(const knot_rdataset_t *rrs, uint16_t pos, uint16_t offset)
+{
        knot_rdata_t *rr = knot_rdataset_at(rrs, pos);
+       assert(rr);
        return rr->data + offset;
 }
 
index ebaab68463d8b2b64bd04d7ba98141763a4df11f..17948be98b483ef315f0b2e8c19c74bba5a50dc3 100644 (file)
 static inline
 uint16_t knot_dnskey_flags(const knot_rdataset_t *rrs, size_t pos)
 {
-       KNOT_RDATASET_CHECK(rrs, pos, return 0);
+       KNOT_RDATASET_CHECK(rrs, pos);
        return knot_wire_read_u16(knot_rdata_offset(rrs, pos, 0));
 }
 
 static inline
 uint8_t knot_dnskey_proto(const knot_rdataset_t *rrs, size_t pos)
 {
-       KNOT_RDATASET_CHECK(rrs, pos, return 0);
-
+       KNOT_RDATASET_CHECK(rrs, pos);
        return *knot_rdata_offset(rrs, pos, 2);
 }
 
 static inline
 uint8_t knot_dnskey_alg(const knot_rdataset_t *rrs, size_t pos)
 {
-       KNOT_RDATASET_CHECK(rrs, pos, return 0);
+       KNOT_RDATASET_CHECK(rrs, pos);
        return *knot_rdata_offset(rrs, pos, 3);
 }
 
@@ -53,7 +52,7 @@ static inline
 void knot_dnskey_key(const knot_rdataset_t *rrs, size_t pos, uint8_t **key,
                      uint16_t *key_size)
 {
-       KNOT_RDATASET_CHECK(rrs, pos, return);
+       KNOT_RDATASET_CHECK(rrs, pos);
        *key = knot_rdata_offset(rrs, pos, 4);
        const knot_rdata_t *rr = knot_rdataset_at(rrs, pos);
        *key_size = rr->len - 4;
index 7ca36869ad759ba542e8d8a96185c9fe2d743337..cd38965d620f4762135dbb4903f848690e560eac 100644 (file)
 static inline
 uint16_t knot_ds_key_tag(const knot_rdataset_t *rrs, size_t pos)
 {
-       KNOT_RDATASET_CHECK(rrs, pos, return 0);
+       KNOT_RDATASET_CHECK(rrs, pos);
        return knot_wire_read_u16(knot_rdata_offset(rrs, pos, 0));
 }
 
 static inline
 uint8_t knot_ds_alg(const knot_rdataset_t *rrs, size_t pos)
 {
-       KNOT_RDATASET_CHECK(rrs, pos, return 0);
+       KNOT_RDATASET_CHECK(rrs, pos);
        return *knot_rdata_offset(rrs, pos, 2);
 }
 
 static inline
 uint8_t knot_ds_digest_type(const knot_rdataset_t *rrs, size_t pos)
 {
-       KNOT_RDATASET_CHECK(rrs, pos, return 0);
+       KNOT_RDATASET_CHECK(rrs, pos);
        return *knot_rdata_offset(rrs, pos, 3);
 }
 
@@ -50,7 +50,7 @@ static inline
 void knot_ds_digest(const knot_rdataset_t *rrs, size_t pos,
                     uint8_t **digest, uint16_t *digest_size)
 {
-       KNOT_RDATASET_CHECK(rrs, pos, return);
+       KNOT_RDATASET_CHECK(rrs, pos);
        *digest = knot_rdata_offset(rrs, pos, 4);
        const knot_rdata_t *rr = knot_rdataset_at(rrs, pos);
        *digest_size = rr->len - 4;
index 2e2c4a9a6027e510c1b3ef18e958e719d0add662..339ca612a4153d630d8f6ee9059e6dbb5eefe591 100644 (file)
@@ -28,7 +28,7 @@
 static inline
 const knot_dname_t *knot_nsec_next(const knot_rdataset_t *rrs)
 {
-       KNOT_RDATASET_CHECK(rrs, 0, return NULL);
+       KNOT_RDATASET_CHECK(rrs, 0);
        return knot_rdata_offset(rrs, 0, 0);
 }
 
@@ -36,7 +36,7 @@ static inline
 void knot_nsec_bitmap(const knot_rdataset_t *rrs,
                       uint8_t **bitmap, uint16_t *size)
 {
-       KNOT_RDATASET_CHECK(rrs, 0, return);
+       KNOT_RDATASET_CHECK(rrs, 0);
        knot_rdata_t *rr = knot_rdataset_at(rrs, 0);
        int next_size = knot_dname_size(knot_nsec_next(rrs));
 
index 7fc0a36bd8f38bd86e194c5dcf2cad97959de6ec..cd4c8ae4024fd0dadf630e0f3b96a161f9d683e5 100644 (file)
 static inline
 uint8_t knot_nsec3_algorithm(const knot_rdataset_t *rrs, size_t pos)
 {
-       KNOT_RDATASET_CHECK(rrs, pos, return 0);
+       KNOT_RDATASET_CHECK(rrs, pos);
        return *knot_rdata_offset(rrs, pos, 0);
 }
 
 static inline
 uint8_t knot_nsec3_flags(const knot_rdataset_t *rrs, size_t pos)
 {
-       KNOT_RDATASET_CHECK(rrs, pos, return 0);
+       KNOT_RDATASET_CHECK(rrs, pos);
        return *knot_rdata_offset(rrs, pos, 1);
 }
 
 static inline
 uint16_t knot_nsec3_iterations(const knot_rdataset_t *rrs, size_t pos)
 {
-       KNOT_RDATASET_CHECK(rrs, pos, return 0);
+       KNOT_RDATASET_CHECK(rrs, pos);
        return knot_wire_read_u16(knot_rdata_offset(rrs, pos, 2));
 }
 
 static inline
 uint8_t knot_nsec3_salt_length(const knot_rdataset_t *rrs, size_t pos)
 {
-       KNOT_RDATASET_CHECK(rrs, pos, return 0);
+       KNOT_RDATASET_CHECK(rrs, pos);
        return *(knot_rdata_offset(rrs, pos, 0) + 4);
 }
 
 static inline
 const uint8_t *knot_nsec3_salt(const knot_rdataset_t *rrs, size_t pos)
 {
-       KNOT_RDATASET_CHECK(rrs, pos, return NULL);
+       KNOT_RDATASET_CHECK(rrs, pos);
        return knot_rdata_offset(rrs, pos, 5);
 }
 
@@ -70,7 +70,7 @@ static inline
 void knot_nsec3_next_hashed(const knot_rdataset_t *rrs, size_t pos,
                             uint8_t **name, uint8_t *name_size)
 {
-       KNOT_RDATASET_CHECK(rrs, pos, return);
+       KNOT_RDATASET_CHECK(rrs, pos);
        uint8_t salt_size = knot_nsec3_salt_length(rrs, pos);
        *name_size = *knot_rdata_offset(rrs, pos, 4 + salt_size + 1);
        *name = knot_rdata_offset(rrs, pos, 4 + salt_size + 2);
@@ -80,7 +80,7 @@ static inline
 void knot_nsec3_bitmap(const knot_rdataset_t *rrs, size_t pos,
                        uint8_t **bitmap, uint16_t *size)
 {
-       KNOT_RDATASET_CHECK(rrs, pos, return);
+       KNOT_RDATASET_CHECK(rrs, pos);
 
        /* Bitmap is last, skip all the items. */
        size_t offset = 6; //hash alg., flags, iterations, salt len., hash len.
index 5469d6f7df743bff385253a96705bc71b2aa7170..f33c512401b243ec6a76f3657d13fb0b0f7b637a 100644 (file)
 static inline
 uint8_t knot_nsec3param_algorithm(const knot_rdataset_t *rrs, size_t pos)
 {
-       KNOT_RDATASET_CHECK(rrs, pos, return 0);
+       KNOT_RDATASET_CHECK(rrs, pos);
        return *knot_rdata_offset(rrs, pos, 0);
 }
 
 static inline
 uint8_t knot_nsec3param_flags(const knot_rdataset_t *rrs, size_t pos)
 {
-       KNOT_RDATASET_CHECK(rrs, pos, return 0);
+       KNOT_RDATASET_CHECK(rrs, pos);
        return *knot_rdata_offset(rrs, pos, 1);
 }
 
 static inline
 uint16_t knot_nsec3param_iterations(const knot_rdataset_t *rrs, size_t pos)
 {
-       KNOT_RDATASET_CHECK(rrs, pos, return 0);
+       KNOT_RDATASET_CHECK(rrs, pos);
        return knot_wire_read_u16(knot_rdata_offset(rrs, pos, 2));
 }
 
 static inline
 uint8_t knot_nsec3param_salt_length(const knot_rdataset_t *rrs, size_t pos)
 {
-       KNOT_RDATASET_CHECK(rrs, pos, return 0);
+       KNOT_RDATASET_CHECK(rrs, pos);
        return *knot_rdata_offset(rrs, pos, 4);
 }
 
 static inline
 const uint8_t *knot_nsec3param_salt(const knot_rdataset_t *rrs, size_t pos)
 {
-       KNOT_RDATASET_CHECK(rrs, pos, return 0);
+       KNOT_RDATASET_CHECK(rrs, pos);
        return knot_rdata_offset(rrs, pos, 5);
 }
 
index 65cb05288a0ff31e8158770ac45eeacc3cad5ab8..b142ad416d163caa4a28aa52d5d5305f40c0960f 100644 (file)
@@ -1,4 +1,4 @@
-/*  Copyright (C) 2017 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz>
+/*  Copyright (C) 2018 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz>
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
 static inline
 const knot_dname_t *knot_cname_name(const knot_rdataset_t *rrs)
 {
-       KNOT_RDATASET_CHECK(rrs, 0, return NULL);
+       KNOT_RDATASET_CHECK(rrs, 0);
        return knot_rdata_offset(rrs, 0, 0);
 }
 
 static inline
 const knot_dname_t *knot_dname_target(const knot_rdataset_t *rrs)
 {
-       KNOT_RDATASET_CHECK(rrs, 0, return NULL);
+       KNOT_RDATASET_CHECK(rrs, 0);
        return knot_rdata_offset(rrs, 0, 0);
 }
 
 static inline
 const knot_dname_t *knot_ns_name(const knot_rdataset_t *rrs, size_t pos)
 {
-       KNOT_RDATASET_CHECK(rrs, pos, return 0);
+       KNOT_RDATASET_CHECK(rrs, pos);
        return knot_rdata_offset(rrs, pos, 0);
 }
 
 static inline
 const knot_dname_t *knot_mx_name(const knot_rdataset_t *rrs, size_t pos)
 {
-       KNOT_RDATASET_CHECK(rrs, pos, return 0);
+       KNOT_RDATASET_CHECK(rrs, pos);
        return knot_rdata_offset(rrs, pos, 2);
 }
 
 static inline
 const knot_dname_t *knot_srv_name(const knot_rdataset_t *rrs, size_t pos)
 {
-       KNOT_RDATASET_CHECK(rrs, pos, return 0);
+       KNOT_RDATASET_CHECK(rrs, pos);
        return knot_rdata_offset(rrs, pos, 6);
 }
 
index 36efb2b2536e18d6579d54caf39fea723443d145..d1ffabaf6467d701fb887d57bf8f558f81acf909 100644 (file)
 static inline
 uint16_t knot_rrsig_type_covered(const knot_rdataset_t *rrs, size_t pos)
 {
-       KNOT_RDATASET_CHECK(rrs, pos, return 0);
+       KNOT_RDATASET_CHECK(rrs, pos);
        return knot_wire_read_u16(knot_rdata_offset(rrs, pos, 0));
 }
 
 static inline
 uint8_t knot_rrsig_algorithm(const knot_rdataset_t *rrs, size_t pos)
 {
-       KNOT_RDATASET_CHECK(rrs, pos, return 0);
+       KNOT_RDATASET_CHECK(rrs, pos);
        return *knot_rdata_offset(rrs, pos, 2);
 }
 
 static inline
 uint8_t knot_rrsig_labels(const knot_rdataset_t *rrs, size_t pos)
 {
-       KNOT_RDATASET_CHECK(rrs, pos, return 0);
+       KNOT_RDATASET_CHECK(rrs, pos);
        return *knot_rdata_offset(rrs, pos, 3);
 }
 
 static inline
 uint32_t knot_rrsig_original_ttl(const knot_rdataset_t *rrs, size_t pos)
 {
-       KNOT_RDATASET_CHECK(rrs, pos, return 0);
+       KNOT_RDATASET_CHECK(rrs, pos);
        return knot_wire_read_u32(knot_rdata_offset(rrs, pos, 4));
 }
 
 static inline
 uint32_t knot_rrsig_sig_expiration(const knot_rdataset_t *rrs, size_t pos)
 {
-       KNOT_RDATASET_CHECK(rrs, pos, return 0);
+       KNOT_RDATASET_CHECK(rrs, pos);
        return knot_wire_read_u32(knot_rdata_offset(rrs, pos, 8));
 }
 
 static inline
 uint32_t knot_rrsig_sig_inception(const knot_rdataset_t *rrs, size_t pos)
 {
-       KNOT_RDATASET_CHECK(rrs, pos, return 0);
+       KNOT_RDATASET_CHECK(rrs, pos);
        return knot_wire_read_u32(knot_rdata_offset(rrs, pos, 12));
 }
 
 static inline
 uint16_t knot_rrsig_key_tag(const knot_rdataset_t *rrs, size_t pos)
 {
-       KNOT_RDATASET_CHECK(rrs, pos, return 0);
+       KNOT_RDATASET_CHECK(rrs, pos);
        return knot_wire_read_u16(knot_rdata_offset(rrs, pos, 16));
 }
 
@@ -79,7 +79,7 @@ static inline
 const knot_dname_t *knot_rrsig_signer_name(const knot_rdataset_t *rrs,
                                            size_t pos)
 {
-       KNOT_RDATASET_CHECK(rrs, pos, return 0);
+       KNOT_RDATASET_CHECK(rrs, pos);
        return knot_rdata_offset(rrs, pos, 18);
 }
 
index 4760264f52302e7d6f0d31bb820d76b7113b2cd9..d8178a4cc64a24aa5a132bb835a3701fce222a9d 100644 (file)
 static inline
 const knot_dname_t *knot_soa_primary_ns(const knot_rdataset_t *rrs)
 {
-       KNOT_RDATASET_CHECK(rrs, 0, return NULL);
+       KNOT_RDATASET_CHECK(rrs, 0);
        return knot_rdata_offset(rrs, 0, 0);
 }
 
 static inline
 const knot_dname_t *knot_soa_mailbox(const knot_rdataset_t *rrs)
 {
-       KNOT_RDATASET_CHECK(rrs, 0, return NULL);
+       KNOT_RDATASET_CHECK(rrs, 0);
        return knot_rdata_offset(rrs, 0, knot_dname_size(knot_soa_primary_ns(rrs)));
 }
 
 static inline
 size_t knot_soa_names_len(const knot_rdataset_t *rrs)
 {
-       KNOT_RDATASET_CHECK(rrs, 0, return 0);
+       KNOT_RDATASET_CHECK(rrs, 0);
        return knot_dname_size(knot_soa_primary_ns(rrs))
               + knot_dname_size(knot_soa_mailbox(rrs));
 }
@@ -51,42 +51,42 @@ size_t knot_soa_names_len(const knot_rdataset_t *rrs)
 static inline
 uint32_t knot_soa_serial(const knot_rdataset_t *rrs)
 {
-       KNOT_RDATASET_CHECK(rrs, 0, return 0);
+       KNOT_RDATASET_CHECK(rrs, 0);
        return knot_wire_read_u32(knot_rdata_offset(rrs, 0, knot_soa_names_len(rrs)));
 }
 
 static inline
 void knot_soa_serial_set(knot_rdataset_t *rrs, uint32_t serial)
 {
-       KNOT_RDATASET_CHECK(rrs, 0, return);
+       KNOT_RDATASET_CHECK(rrs, 0);
        knot_wire_write_u32(knot_rdata_offset(rrs, 0, knot_soa_names_len(rrs)), serial);
 }
 
 static inline
 uint32_t knot_soa_refresh(const knot_rdataset_t *rrs)
 {
-       KNOT_RDATASET_CHECK(rrs, 0, return 0);
+       KNOT_RDATASET_CHECK(rrs, 0);
        return knot_wire_read_u32(knot_rdata_offset(rrs, 0, knot_soa_names_len(rrs) + 4));
 }
 
 static inline
 uint32_t knot_soa_retry(const knot_rdataset_t *rrs)
 {
-       KNOT_RDATASET_CHECK(rrs, 0, return 0);
+       KNOT_RDATASET_CHECK(rrs, 0);
        return knot_wire_read_u32(knot_rdata_offset(rrs, 0, knot_soa_names_len(rrs) + 8));
 }
 
 static inline
 uint32_t knot_soa_expire(const knot_rdataset_t *rrs)
 {
-       KNOT_RDATASET_CHECK(rrs, 0, return 0);
+       KNOT_RDATASET_CHECK(rrs, 0);
        return knot_wire_read_u32(knot_rdata_offset(rrs, 0, knot_soa_names_len(rrs) + 12));
 }
 
 static inline
 uint32_t knot_soa_minimum(const knot_rdataset_t *rrs)
 {
-       KNOT_RDATASET_CHECK(rrs, 0, return 0);
+       KNOT_RDATASET_CHECK(rrs, 0);
        return knot_wire_read_u32(knot_rdata_offset(rrs, 0, knot_soa_names_len(rrs) + 16));
 }