in-addr-util: do not shift 8 or more for uint8_t

See ISO/IEC 9899:TC3 § 6.5.7.3.
This commit is contained in:
Yu Watanabe
2021-10-07 01:03:06 +09:00
parent 333f7d8920
commit 6df860f3a0
+4 -1
View File
@@ -642,9 +642,12 @@ int in6_addr_mask(struct in6_addr *addr, unsigned char prefixlen) {
if (prefixlen >= 8) {
mask = 0xFF;
prefixlen -= 8;
} else {
} else if (prefixlen > 0) {
mask = 0xFF << (8 - prefixlen);
prefixlen = 0;
} else {
assert(prefixlen == 0);
mask = 0;
}
addr->s6_addr[i] &= mask;