]> git.ipfire.org Git - thirdparty/systemd.git/commit
in-addr-util: fix undefined result for in4_addr_netmask_to_prefixlen(<0.0.0.0>)
authorThomas Haller <thaller@redhat.com>
Thu, 13 Dec 2018 18:59:46 +0000 (19:59 +0100)
committerLennart Poettering <lennart@poettering.net>
Fri, 14 Dec 2018 10:15:36 +0000 (11:15 +0100)
commit1a359852641119db951da03bf9c67f9dc34d6257
tree0e91e964237b89b8cc4bde80a08bdafded7b1c24
parent0b1093018b3b94585e96cc66458be5f636b9f484
in-addr-util: fix undefined result for in4_addr_netmask_to_prefixlen(<0.0.0.0>)

u32ctz() was undefined for zero due to __builtin_ctz() [1].
Explicitly check for zero to make the behavior defined.

Note that this issue only affected in4_addr_netmask_to_prefixlen()
which is the only caller.

It may seem slightly odd, to return 32 (bits) for utz(0). But that
is what in4_addr_netmask_to_prefixlen() needs, and it probably makes
the most sense here.

[1] https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html

Fixes: ba91431154ad7bac82ddf0a540ec1b40db62d782
src/basic/in-addr-util.c
src/basic/util.h