]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
in-addr-util: do not shift 8 or more for uint8_t
authorYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 1 Oct 2021 08:35:04 +0000 (17:35 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 6 Oct 2021 16:03:06 +0000 (01:03 +0900)
See ISO/IEC 9899:TC3 ยง 6.5.7.3.

src/basic/in-addr-util.c

index af3724d9d1fb7300b08ef483f3ca2a8dff9cd350..613a568131943369903499253747206e0939de80 100644 (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;