]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Fix Ip::Address::operator =(sockaddr_storage)
authorAlexis Robert <alexis.robert@gmail.com>
Mon, 24 Jun 2013 07:42:35 +0000 (01:42 -0600)
committerAmos Jeffries <squid3@treenet.co.nz>
Mon, 24 Jun 2013 07:42:35 +0000 (01:42 -0600)
The memcpy() for AF_INET6 is using a length of sizeof(sockaddr_in) instead
of sizeof(sockaddr_in6), so squid was trying to connect to truncatured IPv6
addresses with strange ports.

src/ip/Address.cc

index 6dbd1512e13cb99ec980c48e229027883cccaac7..2338a3cab71c7d943f4dc8df71683f2eb908d76a 100644 (file)
@@ -406,7 +406,7 @@ Ip::Address::operator =(const struct sockaddr_storage &s)
 {
     /* some AF_* magic to tell socket types apart and what we need to do */
     if (s.ss_family == AF_INET6) {
-        memcpy(&mSocketAddr_, &s, sizeof(struct sockaddr_in));
+        memcpy(&mSocketAddr_, &s, sizeof(struct sockaddr_in6));
     } else { // convert it to our storage mapping.
         struct sockaddr_in *sin = (struct sockaddr_in*)&s;
         mSocketAddr_.sin6_port = sin->sin_port;