diff options
author | sf <sf@13f79535-47bb-0310-9956-ffa450edef68> | 2015-08-16 14:14:42 +0000 |
---|---|---|
committer | sf <sf@13f79535-47bb-0310-9956-ffa450edef68> | 2015-08-16 14:14:42 +0000 |
commit | 179a569295fc3d2f4e1755ecdc05210988aa6493 (patch) | |
tree | 6a53ba9f24af2a2239f0bb8a49488ac46d9772e3 /network_io | |
parent | a6e345d311a20675a383be34a3f374405d831c82 (diff) | |
download | libapr-179a569295fc3d2f4e1755ecdc05210988aa6493.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: http://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.c | 2 |
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; |