From 1aef66bb3454e08507856430bf5af1b22baa396d Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Sat, 30 Nov 2019 21:07:15 +0000 Subject: [PATCH] New CNAME code shouldn't spin on CNAME loops. --- src/rfc1035.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/rfc1035.c b/src/rfc1035.c index 0fd5c1d..24b778a 100644 --- a/src/rfc1035.c +++ b/src/rfc1035.c @@ -1352,6 +1352,8 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen, for (q = ntohs(header->qdcount); q != 0; q--) { + int count = 255; /* catch loops */ + /* save pointer to name for copying into answers */ nameoffset = p - (unsigned char *)header; @@ -1364,7 +1366,7 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen, ans = 0; /* have we answered this question */ - while ((crecp = cache_find_by_name(NULL, name, now, F_CNAME))) + while (--count != 0 && (crecp = cache_find_by_name(NULL, name, now, F_CNAME))) { char *cname_target = cache_get_cname_target(crecp);