]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Switch getaddrinfo to use inet_pton and verify the result to detect malformed/bad...
authorHenrik Nordstrom <henrik@henriknordstrom.net>
Wed, 13 Aug 2008 14:48:26 +0000 (16:48 +0200)
committerHenrik Nordstrom <henrik@henriknordstrom.net>
Wed, 13 Aug 2008 14:48:26 +0000 (16:48 +0200)
lib/getaddrinfo.c

index 05f7165293d2ec323abe35ff922ff0dfe60ce268..3cecfb1e8390950a64e10cd020c3b8b5c7f1bf8a 100644 (file)
@@ -80,6 +80,7 @@
 #endif
 
 #include "getaddrinfo.h"
+#include "inet_pton.h"
 
 static struct addrinfo *
 dup_addrinfo (struct addrinfo *info, void *addr, size_t addrlen)
@@ -171,7 +172,7 @@ xgetaddrinfo (const char *nodename, const char *servname,
       return (*res == NULL) ? EAI_MEMORY : 0;
     }
 
-  /* If AI_NUMERIC is specified, use inet_addr to translate numbers and
+  /* If AI_NUMERIC is specified, use xinet_pton to translate numbers and
      dots notation. */
   if (hints->ai_flags & AI_NUMERICHOST)
     {
@@ -185,6 +186,8 @@ xgetaddrinfo (const char *nodename, const char *servname,
 
       sin.sin_family = result.ai_family;
       sin.sin_port = htons (port);
+      if (xinet_pton(result.ai_family, nodename, &sin.sin_addr))
+        return EAI_NONAME;
       sin.sin_addr.s_addr = inet_addr (nodename);
       /* Duplicate result and addr and return */
       *res = dup_addrinfo (&result, &sin, sizeof sin);