diff --git a/app/lwip/core/dns.c b/app/lwip/core/dns.c index ab6821f2..1fe7aaa4 100644 --- a/app/lwip/core/dns.c +++ b/app/lwip/core/dns.c @@ -173,7 +173,7 @@ struct dns_table_entry { u8_t seqno; u8_t err; u32_t ttl; - char name[DNS_MAX_NAME_LENGTH]; + char *name; ip_addr_t ipaddr; /* pointer to callback on DNS query done */ dns_found_callback found; @@ -673,6 +673,8 @@ dns_check_entry(u8_t i) if (pEntry->found) (*pEntry->found)(pEntry->name, NULL, pEntry->arg); /* flush this entry */ + mem_free (pEntry->name); + pEntry->name = NULL; pEntry->state = DNS_STATE_UNUSED; pEntry->found = NULL; break; @@ -697,6 +699,8 @@ dns_check_entry(u8_t i) if (--pEntry->ttl == 0) { LWIP_DEBUGF(DNS_DEBUG, ("dns_check_entry: \"%s\": flush\n", pEntry->name)); /* flush this entry */ + mem_free (pEntry->name); + pEntry->name = NULL; pEntry->state = DNS_STATE_UNUSED; pEntry->found = NULL; } @@ -839,6 +843,8 @@ responseerr: (*pEntry->found)(pEntry->name, NULL, pEntry->arg); } /* flush this entry */ + mem_free (pEntry->name); + pEntry->name = NULL; pEntry->state = DNS_STATE_UNUSED; pEntry->found = NULL; @@ -898,11 +904,16 @@ dns_enqueue(const char *name, dns_found_callback found, void *callback_arg) LWIP_DEBUGF(DNS_DEBUG, ("dns_enqueue: \"%s\": use DNS entry %"U16_F"\n", name, (u16_t)(i))); /* fill the entry */ + namelen = LWIP_MIN(strlen(name), DNS_MAX_NAME_LENGTH-1); + char *namebuf = (char *)mem_zalloc (namelen); + if (!namebuf) + return ERR_MEM; pEntry->state = DNS_STATE_NEW; pEntry->seqno = dns_seqno++; pEntry->found = found; pEntry->arg = callback_arg; - namelen = LWIP_MIN(strlen(name), DNS_MAX_NAME_LENGTH-1); + mem_free (pEntry->name); + pEntry->name = namebuf; MEMCPY(pEntry->name, name, namelen); pEntry->name[namelen] = 0;