]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
4373. [bug] Address undefined behaviour in getaddrinfo. [RT #42479]
authorMark Andrews <marka@isc.org>
Thu, 26 May 2016 02:05:37 +0000 (12:05 +1000)
committerMark Andrews <marka@isc.org>
Thu, 26 May 2016 02:05:37 +0000 (12:05 +1000)
CHANGES
lib/irs/getaddrinfo.c

diff --git a/CHANGES b/CHANGES
index ea24f620220b1442d2ae3e3599519c4649e10ae3..fb77ce6736d7682189017d102faab0006f447fa8 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,5 @@
+4373.  [bug]           Address undefined behaviour in getaddrinfo. [RT #42479]
+
 4372.  [bug]           Address undefined behaviour in libt_api. [RT #42480]
 
 4371.  [func]          New "minimal-any" option reduces the size of UDP
index e61602eb3e30facd3b8015b3db40473e257a359b..aa0b4fe7c97e4229238178ffaad87610ad6e747c 100644 (file)
@@ -417,7 +417,7 @@ getaddrinfo(const char *hostname, const char *servname,
                                goto inet6_addr;
                        }
                        addrsize = sizeof(struct in_addr);
-                       addroff = (char *)(&SIN(0)->sin_addr) - (char *)0;
+                       addroff = offsetof(struct sockaddr_in, sin_addr);
                        family = AF_INET;
                        goto common;
 #ifdef IRS_HAVE_SIN6_SCOPE_ID
@@ -426,7 +426,7 @@ getaddrinfo(const char *hostname, const char *servname,
                        if (family && family != AF_INET6)
                                return (EAI_NONAME);
                        addrsize = sizeof(struct in6_addr);
-                       addroff = (char *)(&SIN6(0)->sin6_addr) - (char *)0;
+                       addroff = offsetof(struct sockaddr_in6, sin6_addr);
                        family = AF_INET6;
                        goto common;
 #endif
@@ -435,7 +435,7 @@ getaddrinfo(const char *hostname, const char *servname,
                                return (EAI_NONAME);
                inet6_addr:
                        addrsize = sizeof(struct in6_addr);
-                       addroff = (char *)(&SIN6(0)->sin6_addr) - (char *)0;
+                       addroff = offsetof(struct sockaddr_in6, sin6_addr);
                        family = AF_INET6;
 
                common: