gstein 99/11/26 11:43:53
Modified: src/modules/standard mod_rewrite.c
Log:
jumped the gun on that previous commit. rand()'s lower-order bits may not
be uniformly random. using floating point will use all the bits.
Revision Changes Path
1.152 +7 -1 apache-1.3/src/modules/standard/mod_rewrite.c
Index: mod_rewrite.c
===================================================================
RCS file: /home/cvs/apache-1.3/src/modules/standard/mod_rewrite.c,v
retrieving revision 1.151
retrieving revision 1.152
diff -u -r1.151 -r1.152
--- mod_rewrite.c 1999/11/26 19:31:21 1.151
+++ mod_rewrite.c 1999/11/26 19:43:50 1.152
@@ -3048,7 +3048,13 @@
static int rewrite_rand(int l, int h)
{
rewrite_rand_init();
- return rand() % (h - l + 1) + l;
+
+ /* Get [0,1) and then scale to the appropriate range. Note that using
+ * a floating point value ensures that we use all bits of the rand()
+ * result. Doing an integer modulus would only use the lower-order bits
+ * which may not be as uniformly random.
+ */
+ return ((double)(rand() % RAND_MAX) / RAND_MAX) * (h - l + 1) + l;
}
static char *select_random_value_part(request_rec *r, char *value)