From 67dc545b66541cece4f722cc3c3ce668c546c428 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Vladim=C3=ADr=20=C4=8Cun=C3=A1t?= Date: Wed, 6 Mar 2024 08:13:57 +0100 Subject: [PATCH] treewide: more compatibility with future libknot 3.4 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 | 12 +++++------- lib/dnssec/ta.c | 11 +++++++---- lib/resolve.c | 3 ++- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/lib/dnssec/nsec.c b/lib/dnssec/nsec.c index ddedc4e2b..be34d92db 100644 --- a/lib/dnssec/nsec.c +++ b/lib/dnssec/nsec.c @@ -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); } diff --git a/lib/dnssec/ta.c b/lib/dnssec/ta.c index fcff1e78f..13659c1b9 100644 --- a/lib/dnssec/ta.c +++ b/lib/dnssec/ta.c @@ -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. */ diff --git a/lib/resolve.c b/lib/resolve.c index 66581c59c..710b1ff2b 100644 --- a/lib/resolve.c +++ b/lib/resolve.c @@ -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); -- 2.47.2