]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: haterm: fix the random suffix multiplication
authorWilly Tarreau <w@1wt.eu>
Mon, 25 May 2026 18:43:38 +0000 (20:43 +0200)
committerWilly Tarreau <w@1wt.eu>
Mon, 25 May 2026 18:49:22 +0000 (20:49 +0200)
Passing a size or anything with suffix "r" is supposed to apply a
random factor form 0 to 1. However due to the replacement of random()
with ha_random64(), all 64 bits are random before the divide, so the
end result is a random 32-bit value. In addition, ha_random64() is
slow since shared between threads.

Let's use statistical_prng() which is designed for this purpose and
is much cheaper. No backport is needed, this is only in 3.4.

src/haterm.c

index f7d9ffae504cec1e5d053efe5d935427b64b05de..f1b2272141be22997f2be69d9f687eae75b15fde 100644 (file)
@@ -788,7 +788,7 @@ static void hstream_parse_uri(struct ist uri, struct hstream *hs)
                                } while (*next);
 
                                if (use_rand)
-                                       result = ((long long)ha_random64() * result) / ((long long)RAND_MAX + 1);
+                                       result = ((long long)statistical_prng() * result) / 0xFFFFFFFFU;
 
                                switch (*arg) {
                                case 's':