ares_getnameinfo: fix random results with c-ares 1.7.5
authorDenis Bilenko <denis.bilenko@gmail.com>
Wed, 24 Aug 2011 16:37:11 +0000 (18:37 +0200)
committerYang Tse <yangsita@gmail.com>
Wed, 24 Aug 2011 16:37:11 +0000 (18:37 +0200)
In ares_getnameinfo memcpy did not copy enough bytes, causing
it to return arbitrary memory contents as a result.

ares_getnameinfo.c

index 82e261dae41a0a3c7fef4cebba65386a3ca2d4a2..cdcd516494412d73d8227c1ffd2558f9c633736c 100644 (file)
@@ -188,7 +188,7 @@ void ares_getnameinfo(ares_channel channel, const struct sockaddr *sa,
         if (sa->sa_family == AF_INET)
           {
             niquery->family = AF_INET;
-            memcpy(&niquery->addr.addr4, addr, sizeof(struct in_addr));
+            memcpy(&niquery->addr.addr4, addr, sizeof(niquery->addr.addr4));
             ares_gethostbyaddr(channel, &addr->sin_addr,
                                sizeof(struct in_addr), AF_INET,
                                nameinfo_callback, niquery);
@@ -196,7 +196,7 @@ void ares_getnameinfo(ares_channel channel, const struct sockaddr *sa,
         else
           {
             niquery->family = AF_INET6;
-            memcpy(&niquery->addr.addr6, addr6, sizeof(struct ares_in6_addr));
+            memcpy(&niquery->addr.addr6, addr6, sizeof(niquery->addr.addr6));
             ares_gethostbyaddr(channel, &addr6->sin6_addr,
                                sizeof(struct ares_in6_addr), AF_INET6,
                                nameinfo_callback, niquery);