diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2022-12-10 10:21:41 +0900 |
---|---|---|
committer | Yu Watanabe <watanabe.yu+github@gmail.com> | 2022-12-10 10:32:09 +0900 |
commit | 494ef1674334bfb3b4b574cb24d447bc4e7986ab (patch) | |
tree | d5c403411fb58a045283afa7524d5a1c6c709ada /src/resolve/resolved-dns-rr.c | |
parent | 52c602d4c6a744a1000f7bd8cc04a4c3a8a8ca9a (diff) | |
download | systemd-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.c | 32 |
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) { |