summaryrefslogtreecommitdiff
path: root/src/resolve/resolved-dns-rr.c
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2022-12-10 10:21:41 +0900
committerYu Watanabe <watanabe.yu+github@gmail.com>2022-12-10 10:32:09 +0900
commit494ef1674334bfb3b4b574cb24d447bc4e7986ab (patch)
treed5c403411fb58a045283afa7524d5a1c6c709ada /src/resolve/resolved-dns-rr.c
parent52c602d4c6a744a1000f7bd8cc04a4c3a8a8ca9a (diff)
downloadsystemd-494ef1674334bfb3b4b574cb24d447bc4e7986ab.tar.gz
resolve: drop recursion in TXT field handling
Fixes #25683.
Diffstat (limited to 'src/resolve/resolved-dns-rr.c')
-rw-r--r--src/resolve/resolved-dns-rr.c32
1 files changed, 13 insertions, 19 deletions
diff --git a/src/resolve/resolved-dns-rr.c b/src/resolve/resolved-dns-rr.c
index a4ba6bdc6d..5f890f9509 100644
--- a/src/resolve/resolved-dns-rr.c
+++ b/src/resolve/resolved-dns-rr.c
@@ -1768,36 +1768,30 @@ int dns_resource_record_get_cname_target(DnsResourceKey *key, DnsResourceRecord
return 0;
}
-DnsTxtItem *dns_txt_item_free_all(DnsTxtItem *i) {
- DnsTxtItem *n;
-
- if (!i)
- return NULL;
-
- n = i->items_next;
+DnsTxtItem *dns_txt_item_free_all(DnsTxtItem *first) {
+ LIST_FOREACH(items, i, first)
+ free(i);
- free(i);
- return dns_txt_item_free_all(n);
+ return NULL;
}
bool dns_txt_item_equal(DnsTxtItem *a, DnsTxtItem *b) {
+ DnsTxtItem *bb = b;
if (a == b)
return true;
- if (!a != !b)
- return false;
-
- if (!a)
- return true;
+ LIST_FOREACH(items, aa, a) {
+ if (!bb)
+ return false;
- if (a->length != b->length)
- return false;
+ if (memcmp_nn(aa->data, aa->length, bb->data, bb->length) != 0)
+ return false;
- if (memcmp(a->data, b->data, a->length) != 0)
- return false;
+ bb = bb->items_next;
+ }
- return dns_txt_item_equal(a->items_next, b->items_next);
+ return !bb;
}
DnsTxtItem *dns_txt_item_copy(DnsTxtItem *first) {