From: simon Date: Fri, 1 Apr 2005 08:46:26 +0000 (+0000) Subject: sk_address_is_local() was ignoring the possibility that a SockAddr X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/commitdiff_plain/2b4bbb9b8ae620efb82a14ed8b6cd147eb30bb73 sk_address_is_local() was ignoring the possibility that a SockAddr might have an IPv4 address in `ai' rather than in `addresses'. Thanks to Martin Prikryl for pointing this out. git-svn-id: svn://svn.tartarus.org/sgt/putty@5587 cda61777-01e9-0310-a592-d414129be87e --- diff --git a/windows/winnet.c b/windows/winnet.c index 8a7580b2..f277e717 100644 --- a/windows/winnet.c +++ b/windows/winnet.c @@ -572,10 +572,18 @@ int sk_address_is_local(SockAddr addr) } else #endif if (addr->family == AF_INET) { - struct in_addr a; - assert(addr->addresses && addr->curraddr < addr->naddresses); - a.s_addr = p_htonl(addr->addresses[addr->curraddr]); - return ipv4_is_local_addr(a); +#ifndef NO_IPV6 + if (addr->ai) { + return ipv4_is_local_addr(((struct sockaddr_in *)addr->ai->ai_addr) + ->sin_addr); + } else +#endif + { + struct in_addr a; + assert(addr->addresses && addr->curraddr < addr->naddresses); + a.s_addr = p_htonl(addr->addresses[addr->curraddr]); + return ipv4_is_local_addr(a); + } } else { assert(addr->family == AF_UNSPEC); return 0; /* we don't know; assume not */