summaryrefslogtreecommitdiff
path: root/network_io
diff options
context:
space:
mode:
authorStefan Fritsch <sf@apache.org>2015-08-16 14:14:42 +0000
committerStefan Fritsch <sf@apache.org>2015-08-16 14:14:42 +0000
commit02109c930f36f775b64aae9625b0c55c012d6e94 (patch)
tree6a53ba9f24af2a2239f0bb8a49488ac46d9772e3 /network_io
parent59ddcc9204311e6693d3ad4e5625307ec72fffec (diff)
downloadapr-02109c930f36f775b64aae9625b0c55c012d6e94.tar.gz
fix comparison of sin6_addr
One cannot assume that sin6_addr is located at the start of sa_data. For example, glibc puts sin6_flowinfo there. Fix by casting to the proper type first. Reported by Andre Naujoks <nautsch2 gmail com> via https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=759534 git-svn-id: https://svn.apache.org/repos/asf/apr/apr/trunk@1696140 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'network_io')
-rw-r--r--network_io/unix/multicast.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/network_io/unix/multicast.c b/network_io/unix/multicast.c
index e4e8c80f1..a8c85ce69 100644
--- a/network_io/unix/multicast.c
+++ b/network_io/unix/multicast.c
@@ -65,7 +65,7 @@ static unsigned int find_if_index(const apr_sockaddr_t *iface)
for (ifp = ifs; ifp; ifp = ifp->ifa_next) {
if (ifp->ifa_addr != NULL && ifp->ifa_addr->sa_family == AF_INET6) {
if (memcmp(&iface->sa.sin6.sin6_addr,
- &ifp->ifa_addr->sa_data[0],
+ &((struct sockaddr_in6*)ifp->ifa_addr)->sin6_addr,
sizeof(iface->sa.sin6.sin6_addr)) == 0) {
index = if_nametoindex(ifp->ifa_name);
break;