Browse Source

Fix the case for InetAddress::containsAddress for IPv6 route of ::

Grant Limberg 8 years ago
parent
commit
6a50291aa2
1 changed files with 8 additions and 2 deletions
  1. 8 2
      node/InetAddress.cpp

+ 8 - 2
node/InetAddress.cpp

@@ -236,8 +236,14 @@ InetAddress InetAddress::netmask() const
 		case AF_INET6: {
 			uint64_t nm[2];
 			const unsigned int bits = netmaskBits();
-			nm[0] = Utils::hton((uint64_t)((bits >= 64) ? 0xffffffffffffffffULL : (0xffffffffffffffffULL << (64 - bits))));
-			nm[1] = Utils::hton((uint64_t)((bits <= 64) ? 0ULL : (0xffffffffffffffffULL << (128 - bits))));
+            if(bits) {
+                nm[0] = Utils::hton((uint64_t)((bits >= 64) ? 0xffffffffffffffffULL : (0xffffffffffffffffULL << (64 - bits))));
+                nm[1] = Utils::hton((uint64_t)((bits <= 64) ? 0ULL : (0xffffffffffffffffULL << (128 - bits))));
+            }
+            else {
+                nm[0] = 0;
+                nm[1] = 0;
+            }
 			memcpy(reinterpret_cast<struct sockaddr_in6 *>(&r)->sin6_addr.s6_addr,nm,16);
 		}	break;
 	}