]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Do not return ISC_R_UNEXPECTEDEND
authorMark Andrews <marka@isc.org>
Tue, 22 Feb 2022 01:27:17 +0000 (12:27 +1100)
committerEvan Hunt <each@isc.org>
Sat, 26 Feb 2022 04:57:08 +0000 (20:57 -0800)
All rdata passed to dns_rdata_tostruct is supposed to be well formed,
assert if it isn't.

lib/dns/rdata/generic/caa_257.c
lib/dns/rdata/generic/doa_259.c
lib/dns/rdata/generic/ipseckey_45.c
lib/dns/rdata/generic/key_25.c
lib/dns/rdata/generic/sink_40.c
lib/dns/rdata/generic/uri_256.c

index eac735fc6b290a3542fbfed249a1bea680668092..6b9431634be7dd7720ca73763cae6eda5b8f1b9f 100644 (file)
@@ -507,27 +507,19 @@ tostruct_caa(ARGS_TOSTRUCT) {
        /*
         * Flags
         */
-       if (sr.length < 1) {
-               return (ISC_R_UNEXPECTEDEND);
-       }
        caa->flags = uint8_fromregion(&sr);
        isc_region_consume(&sr, 1);
 
        /*
         * Tag length
         */
-       if (sr.length < 1) {
-               return (ISC_R_UNEXPECTEDEND);
-       }
        caa->tag_len = uint8_fromregion(&sr);
        isc_region_consume(&sr, 1);
 
        /*
         * Tag
         */
-       if (sr.length < caa->tag_len) {
-               return (ISC_R_UNEXPECTEDEND);
-       }
+       INSIST(sr.length >= caa->tag_len);
        caa->tag = mem_maybedup(mctx, sr.base, caa->tag_len);
        isc_region_consume(&sr, caa->tag_len);
 
index d7c6129dd8a46e49d5b128d1de52cd8e44663e64..78e8b7b863b595e12fbdd710e072e30cdf1f1310 100644 (file)
@@ -213,7 +213,7 @@ tostruct_doa(ARGS_TOSTRUCT) {
        REQUIRE(rdata != NULL);
        REQUIRE(rdata->type == dns_rdatatype_doa);
        REQUIRE(doa != NULL);
-       REQUIRE(rdata->length != 0);
+       REQUIRE(rdata->length >= 10);
 
        doa->common.rdclass = rdata->rdclass;
        doa->common.rdtype = rdata->type;
@@ -224,36 +224,24 @@ tostruct_doa(ARGS_TOSTRUCT) {
        /*
         * DOA-ENTERPRISE
         */
-       if (region.length < 4) {
-               return (ISC_R_UNEXPECTEDEND);
-       }
        doa->enterprise = uint32_fromregion(&region);
        isc_region_consume(&region, 4);
 
        /*
         * DOA-TYPE
         */
-       if (region.length < 4) {
-               return (ISC_R_UNEXPECTEDEND);
-       }
        doa->type = uint32_fromregion(&region);
        isc_region_consume(&region, 4);
 
        /*
         * DOA-LOCATION
         */
-       if (region.length < 1) {
-               return (ISC_R_UNEXPECTEDEND);
-       }
        doa->location = uint8_fromregion(&region);
        isc_region_consume(&region, 1);
 
        /*
         * DOA-MEDIA-TYPE
         */
-       if (region.length < 1) {
-               return (ISC_R_UNEXPECTEDEND);
-       }
        doa->mediatype_len = uint8_fromregion(&region);
        isc_region_consume(&region, 1);
        INSIST(doa->mediatype_len <= region.length);
index 281381808631b775926432b9de102ec1423fa769..33a8ca1894069ca1f2ec19db4c7a4767240bbad6 100644 (file)
@@ -353,10 +353,6 @@ tostruct_ipseckey(ARGS_TOSTRUCT) {
        REQUIRE(ipseckey != NULL);
        REQUIRE(rdata->length >= 3);
 
-       if (rdata->data[1] > 3U) {
-               return (ISC_R_NOTIMPLEMENTED);
-       }
-
        ipseckey->common.rdclass = rdata->rdclass;
        ipseckey->common.rdtype = rdata->type;
        ISC_LINK_INIT(&ipseckey->common, link);
@@ -384,6 +380,7 @@ tostruct_ipseckey(ARGS_TOSTRUCT) {
                break;
 
        case 2:
+               INSIST(region.length >= 16U);
                memmove(ipseckey->in6_addr.s6_addr, region.base, 16);
                isc_region_consume(&region, 16);
                break;
index 688b6684ecb174bfc10cbf6d093e7586ea1a9623..7c13af60c070a9dec8f80396a0e4f0cd95e53f9c 100644 (file)
@@ -322,7 +322,7 @@ generic_tostruct_key(ARGS_TOSTRUCT) {
        isc_region_t sr;
 
        REQUIRE(key != NULL);
-       REQUIRE(rdata->length != 0);
+       REQUIRE(rdata->length >= 4U);
 
        REQUIRE(key != NULL);
        REQUIRE(key->common.rdclass == rdata->rdclass);
@@ -332,23 +332,14 @@ generic_tostruct_key(ARGS_TOSTRUCT) {
        dns_rdata_toregion(rdata, &sr);
 
        /* Flags */
-       if (sr.length < 2) {
-               return (ISC_R_UNEXPECTEDEND);
-       }
        key->flags = uint16_fromregion(&sr);
        isc_region_consume(&sr, 2);
 
        /* Protocol */
-       if (sr.length < 1) {
-               return (ISC_R_UNEXPECTEDEND);
-       }
        key->protocol = uint8_fromregion(&sr);
        isc_region_consume(&sr, 1);
 
        /* Algorithm */
-       if (sr.length < 1) {
-               return (ISC_R_UNEXPECTEDEND);
-       }
        key->algorithm = uint8_fromregion(&sr);
        isc_region_consume(&sr, 1);
 
index 38104cf90c53d0c7a19713d76de2ca4e31ee8a6d..d0c5825d92bbb2ea4bd83c4932af01673b14240d 100644 (file)
@@ -191,23 +191,14 @@ tostruct_sink(ARGS_TOSTRUCT) {
        dns_rdata_toregion(rdata, &sr);
 
        /* Meaning */
-       if (sr.length < 1) {
-               return (ISC_R_UNEXPECTEDEND);
-       }
        sink->meaning = uint8_fromregion(&sr);
        isc_region_consume(&sr, 1);
 
        /* Coding */
-       if (sr.length < 1) {
-               return (ISC_R_UNEXPECTEDEND);
-       }
        sink->coding = uint8_fromregion(&sr);
        isc_region_consume(&sr, 1);
 
        /* Subcoding */
-       if (sr.length < 1) {
-               return (ISC_R_UNEXPECTEDEND);
-       }
        sink->subcoding = uint8_fromregion(&sr);
        isc_region_consume(&sr, 1);
 
index a613e4d9bb2e66a13b99335f6fec13d28aa5746f..0e1bb00604aac597c0b50523c77af3d84fc893ac 100644 (file)
@@ -209,7 +209,7 @@ tostruct_uri(ARGS_TOSTRUCT) {
 
        REQUIRE(rdata->type == dns_rdatatype_uri);
        REQUIRE(uri != NULL);
-       REQUIRE(rdata->length != 0);
+       REQUIRE(rdata->length >= 4);
 
        uri->common.rdclass = rdata->rdclass;
        uri->common.rdtype = rdata->type;
@@ -220,18 +220,12 @@ tostruct_uri(ARGS_TOSTRUCT) {
        /*
         * Priority
         */
-       if (sr.length < 2) {
-               return (ISC_R_UNEXPECTEDEND);
-       }
        uri->priority = uint16_fromregion(&sr);
        isc_region_consume(&sr, 2);
 
        /*
         * Weight
         */
-       if (sr.length < 2) {
-               return (ISC_R_UNEXPECTEDEND);
-       }
        uri->weight = uint16_fromregion(&sr);
        isc_region_consume(&sr, 2);