From 8167d20c462f7963762edcc1bffdc19b36952571 Mon Sep 17 00:00:00 2001 From: kedixa <1204837541@qq.com> Date: Fri, 3 Dec 2021 21:12:17 +0800 Subject: [PATCH] fix dns client bug when trailing dot --- src/client/WFDnsClient.cc | 2 +- src/protocol/DnsMessage.h | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/client/WFDnsClient.cc b/src/client/WFDnsClient.cc index 5eee3e3d..8ccf6c57 100644 --- a/src/client/WFDnsClient.cc +++ b/src/client/WFDnsClient.cc @@ -252,7 +252,7 @@ WFDnsTask *WFDnsClient::create_dns_task(const std::string& name, status.try_origin_state = DNS_STATUS_TRY_ORIGIN_FIRST; if (!name.empty() && name.back() == '.') - status.next_domain = p->uris.size(); + status.next_domain = p->search_list.size(); else if (__get_ndots(name) < p->ndots) status.try_origin_state = DNS_STATUS_TRY_ORIGIN_LAST; diff --git a/src/protocol/DnsMessage.h b/src/protocol/DnsMessage.h index ee51edd4..94289b1f 100644 --- a/src/protocol/DnsMessage.h +++ b/src/protocol/DnsMessage.h @@ -237,9 +237,12 @@ public: void set_request_name(const std::string& name) { - this->request_name = name; - while (!this->request_name.empty() && this->request_name.back() == '.') - this->request_name.pop_back(); + std::string req_name(name); + + while (req_name.size() > 1 && req_name.back() == '.') + req_name.pop_back(); + + this->request_name = std::move(req_name); } protected: