--- src/lwip/core/dns.c +++ src/lwip/core/dns.c @@ -939,12 +939,23 @@ dns_gethostbyname(const char *hostname, ip_addr_t *addr, dns_found_callback foun u32_t ipaddr; /* not initialized or no valid server yet, or invalid addr pointer * or invalid hostname or invalid hostname length */ - if ((dns_pcb == NULL) || (addr == NULL) || + if ((addr == NULL) || (!hostname) || (!hostname[0]) || (strlen(hostname) >= DNS_MAX_NAME_LENGTH)) { return ERR_ARG; } + /* host name already in octet notation? set ip addr and return ERR_OK */ + ipaddr = ipaddr_addr(hostname); + if (ipaddr != IPADDR_NONE) { + ip4_addr_set_u32(addr, ipaddr); + return ERR_OK; + } + + if (dns_pcb == NULL) { + return ERR_ARG; + } + #if LWIP_HAVE_LOOPIF if (strcmp(hostname, "localhost")==0) { ip_addr_set_loopback(addr); @@ -952,12 +963,8 @@ dns_gethostbyname(const char *hostname, ip_addr_t *addr, dns_found_callback foun } #endif /* LWIP_HAVE_LOOPIF */ - /* host name already in octet notation? set ip addr and return ERR_OK */ - ipaddr = ipaddr_addr(hostname); - if (ipaddr == IPADDR_NONE) { - /* already have this address cached? */ - ipaddr = dns_lookup(hostname); - } + /* already have this address cached? */ + ipaddr = dns_lookup(hostname); if (ipaddr != IPADDR_NONE) { ip4_addr_set_u32(addr, ipaddr); return ERR_OK;