]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
treewide: more compatibility with future libknot 3.4 docs-develop-knot-r94p16/deployments/4003
authorVladimír Čunát <vladimir.cunat@nic.cz>
Wed, 6 Mar 2024 07:13:57 +0000 (08:13 +0100)
committerVladimír Čunát <vladimir.cunat@nic.cz>
Mon, 6 May 2024 12:28:44 +0000 (14:28 +0200)
knot_wire_next_label used to return NULL when applied to . (root)
but that's not allowed anymore, and some of our calls relied on that.

lib/dnssec/nsec.c
lib/dnssec/ta.c
lib/resolve.c

index ddedc4e2b7f27b07733991e7cd90d4e7d1487217..be34d92db0967cf14d9d44dc37753a7e398a1d1f 100644 (file)
@@ -81,15 +81,13 @@ static int dname_cmp(const knot_dname_t *d1, const knot_dname_t *d2)
        dname_reverse(d1, d1_len, d1_rev_arr);
        dname_reverse(d2, d2_len, d2_rev_arr);
 
-       int res = 0;
-       while (res == 0 && d1_rev != NULL) {
-               res = lf_cmp(d1_rev, d2_rev);
+       do {
+               int res = lf_cmp(d1_rev, d2_rev);
+               if (res != 0 || d1_rev[0] == '\0')
+                       return res;
                d1_rev = knot_dname_next_label(d1_rev);
                d2_rev = knot_dname_next_label(d2_rev);
-       }
-
-       kr_require(res != 0 || d2_rev == NULL);
-       return res;
+       } while (true);
 }
 
 
index fcff1e78ff8e3585e702b3266441b3c14d1bd5f0..13659c1b91b46f46cf196712042a94996322ee37 100644 (file)
@@ -30,7 +30,7 @@ const knot_dname_t * kr_ta_closest(const struct kr_context *ctx, const knot_dnam
                /* DS is parent-side record, so the parent name needs to be covered. */
                name = knot_dname_next_label(name);
        }
-       while (name) {
+       do {
                struct kr_context *ctx_nc = (struct kr_context *)/*const-cast*/ctx;
                if (kr_ta_get(ctx_nc->trust_anchors, name)) {
                        return name;
@@ -38,9 +38,12 @@ const knot_dname_t * kr_ta_closest(const struct kr_context *ctx, const knot_dnam
                if (kr_ta_get(ctx_nc->negative_anchors, name)) {
                        return NULL;
                }
-               name = knot_dname_next_label(name);
-       }
-       return NULL;
+               if (name[0] == '\0') {
+                       return NULL;
+               } else {
+                       name = knot_dname_next_label(name);
+               }
+       } while (true);
 }
 
 /* @internal Create DS from DNSKEY, caller MUST free dst if successful. */
index 66581c59c65d1a3cfb6113be5b6ff90c8ffab774..710b1ff2b8ade218a1ded3448ae77f4e7c4b4afd 100644 (file)
@@ -1234,7 +1234,7 @@ static int zone_cut_check(struct kr_request *request, struct kr_query *qry, knot
                    && knot_dname_in_bailiwick(qry->sname, parent) >= 0) {
                        requested_name = knot_dname_next_label(parent);
                }
-       } else if ((qry->stype == KNOT_RRTYPE_DS) && (qry->sname[0] != '\0')) {
+       } else if ((qry->stype == KNOT_RRTYPE_DS) && (requested_name[0] != '\0')) {
                /* If this is explicit DS query, start from encloser too. */
                requested_name = knot_dname_next_label(requested_name);
        }
@@ -1245,6 +1245,7 @@ static int zone_cut_check(struct kr_request *request, struct kr_query *qry, knot
                if (state == KR_STATE_DONE || (state & KR_STATE_FAIL)) {
                        return state;
                } else if (state == KR_STATE_CONSUME) {
+                       kr_require(requested_name[0] != '\0');
                        requested_name = knot_dname_next_label(requested_name);
                }
        } while (state == KR_STATE_CONSUME);