]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Calling __builtin_clzll with a 0 value is undefined (and it does the wrong thing)
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Fri, 27 Aug 2021 22:56:26 +0000 (17:56 -0500)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Fri, 27 Aug 2021 23:02:19 +0000 (18:02 -0500)
src/lib/util/misc.h

index 91fb57f0cd1a0b0524ca49ad7ea5f5c16674a5e9..40bae2b87f8344fcea0fc4d8bda2d6c0d88047d7 100644 (file)
@@ -173,11 +173,12 @@ static inline bool is_zero(char const *value)
  */
 static inline uint8_t fr_high_bit_pos(uint64_t num)
 {
+       if (num == 0) return 0; /* num being zero is undefined behaviour for __builtin_clzll */
+
 #ifdef HAVE_BUILTIN_CLZLL
        return (64 - __builtin_clzll(num));
 #else
        uint8_t ret = 1;
-       if (num == 0) return 0;
        while (num >>= 1) ret++;
        return ret;
 #endif