revision 1.15
date: 2026/05/09 01:54:51; author: tb; state: Exp; lines: +14 -13; commitid: zZPVUWycKAslGJtO;
Avoid recursive cleanup in getrrsetbyname()
Instead of freeing struct dns_query and struct dns_rr by walking the
linked lists recursively, use a simple loop. This avoids a possible
stack exhaustion unlikely to be reachable with the limits modern
resolvers impose.
From Dhiraj Mishra
static void
free_dns_query(struct dns_query *p)
{
- if (p == NULL)
- return;
+ struct dns_query *next;
- if (p->name)
+ while (p != NULL) {
+ next = p->next;
free(p->name);
- free_dns_query(p->next);
- free(p);
+ free(p);
+ p = next;
+ }
}
static void
free_dns_rr(struct dns_rr *p)
{
- if (p == NULL)
- return;
+ struct dns_rr *next;
- if (p->name)
+ while (p != NULL) {
+ next = p->next;
free(p->name);
- if (p->rdata)
free(p->rdata);
- free_dns_rr(p->next);
- free(p);
+ free(p);
+ p = next;
+ }
}
static void