From ede52ba98d02bc1ac4483a77d403ff1d64a003ce Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Thu, 26 May 2016 12:05:37 +1000 Subject: [PATCH] 4373. [bug] Address undefined behaviour in getaddrinfo. [RT #42479] --- CHANGES | 2 ++ lib/irs/getaddrinfo.c | 6 +++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/CHANGES b/CHANGES index ea24f62022..fb77ce6736 100644 --- 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 diff --git a/lib/irs/getaddrinfo.c b/lib/irs/getaddrinfo.c index e61602eb3e..aa0b4fe7c9 100644 --- a/lib/irs/getaddrinfo.c +++ b/lib/irs/getaddrinfo.c @@ -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: