From f6ee9dc61654f541cd05861ba9a3685fc185b575 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Wed, 22 Aug 2018 04:52:02 +0200 Subject: [PATCH] BUG/MEDIUM: dns: don't store dns_build_query() result in the trash's length By convenience or laziness we used to store dns_build_query()'s return code into trash.data. The result checks applied there compare trash.data to -1 while it's now unsigned since commit 843b7cb ("MEDIUM: chunks: make the chunk struct's fields match the buffer struct"). Let's clean this up and test the result itself without storing it first. No backport is needed. --- src/dns.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/dns.c b/src/dns.c index 985ed0f33..033fcc145 100644 --- a/src/dns.c +++ b/src/dns.c @@ -1674,20 +1674,20 @@ static void dns_resolve_send(struct dgram_conn *dgram) HA_SPIN_LOCK(DNS_LOCK, &resolvers->lock); list_for_each_entry(res, &resolvers->resolutions.curr, list) { - int ret; + int ret, len; if (res->nb_queries == resolvers->nb_nameservers) continue; - trash.data = dns_build_query(res->query_id, res->query_type, - resolvers->accepted_payload_size, - res->hostname_dn, res->hostname_dn_len, - trash.area, trash.size); - if (trash.data == -1) + len = dns_build_query(res->query_id, res->query_type, + resolvers->accepted_payload_size, + res->hostname_dn, res->hostname_dn_len, + trash.area, trash.size); + if (len == -1) goto snd_error; - ret = send(fd, trash.area, trash.data, 0); - if (ret != trash.data) + ret = send(fd, trash.area, len, 0); + if (ret != len) goto snd_error; ns->counters.sent++;