diff options
author | Stefan Fritsch <sf@apache.org> | 2015-08-16 14:14:42 +0000 |
---|---|---|
committer | Stefan Fritsch <sf@apache.org> | 2015-08-16 14:14:42 +0000 |
commit | 02109c930f36f775b64aae9625b0c55c012d6e94 (patch) | |
tree | 6a53ba9f24af2a2239f0bb8a49488ac46d9772e3 /network_io | |
parent | 59ddcc9204311e6693d3ad4e5625307ec72fffec (diff) | |
download | apr-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.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; |