From 9213f898c3a33280f80191b44a035aa2541d0eba Mon Sep 17 00:00:00 2001 From: Nick Peng Date: Mon, 7 Oct 2019 23:14:23 +0800 Subject: [PATCH] Fix CNAME buff too short issue --- src/dns.c | 5 +++++ src/dns_server.c | 8 ++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/dns.c b/src/dns.c index c23befa..86f2248 100644 --- a/src/dns.c +++ b/src/dns.c @@ -265,6 +265,7 @@ static int _dns_add_qr_head(struct dns_data_context *data_context, char *domain, static int _dns_get_qr_head(struct dns_data_context *data_context, char *domain, int maxsize, int *qtype, int *qclass) { int i; + int is_read_all = 0; /* question head */ /* |domain | * |qtype | qclass | @@ -278,6 +279,7 @@ static int _dns_get_qr_head(struct dns_data_context *data_context, char *domain, domain++; data_context->ptr++; i++; + is_read_all = 1; break; } *domain = *data_context->ptr; @@ -286,6 +288,9 @@ static int _dns_get_qr_head(struct dns_data_context *data_context, char *domain, } *domain = '\0'; + if (is_read_all == 0) { + return -1; + } if (_dns_data_left_len(data_context) < 4) { return -1; diff --git a/src/dns_server.c b/src/dns_server.c index a2fe613..bab1fc5 100644 --- a/src/dns_server.c +++ b/src/dns_server.c @@ -1428,13 +1428,13 @@ static int _dns_server_process_answer(struct dns_request *request, char *domain, request->rcode = packet->head.rcode; } break; case DNS_T_NS: { - char cname[128]; - dns_get_CNAME(rrs, name, 128, &ttl, cname, 128); + char cname[DNS_MAX_CNAME_LEN]; + dns_get_CNAME(rrs, name, DNS_MAX_CNAME_LEN, &ttl, cname, DNS_MAX_CNAME_LEN); tlog(TLOG_DEBUG, "NS: %s ttl:%d cname: %s\n", name, ttl, cname); } break; case DNS_T_CNAME: { - char cname[128]; - dns_get_CNAME(rrs, name, 128, &ttl, cname, 128); + char cname[DNS_MAX_CNAME_LEN]; + dns_get_CNAME(rrs, name, DNS_MAX_CNAME_LEN, &ttl, cname, DNS_MAX_CNAME_LEN); tlog(TLOG_DEBUG, "name:%s ttl: %d cname: %s\n", name, ttl, cname); safe_strncpy(request->cname, cname, DNS_MAX_CNAME_LEN); request->ttl_cname = ttl;