cvs: php3 /functions/ rand.c

From: Date: Mon, 22 May 2000 17:31:42 +0000
Subject: cvs: php3 /functions/ rand.c
Groups: php.dev 
Request: Send a blank email to php-dev+get-19235@lists.php.net to get a copy of this message
hholzgra Mon May 22 19:31:42 2000 EDT Modified files: /php3/functions rand.c Log: in [mt_]rand(): (see BUG #3353) - additional range checking for (max-min)<=[MT_]RAND_MAX - [mt_]rand(0,[mt_]getrandmax()) will now work without integer overflow Index: php3/functions/rand.c diff -u php3/functions/rand.c:1.38 php3/functions/rand.c:1.39 --- php3/functions/rand.c:1.38 Mon May 22 19:01:50 2000 +++ php3/functions/rand.c Mon May 22 19:31:41 2000 @@ -30,7 +30,7 @@ | Based on code from: Shawn Cokus <Cokus@math.washington.edu> | +----------------------------------------------------------------------+ */ -/* $Id: rand.c,v 1.38 2000/05/22 17:01:50 hholzgra Exp $ */ +/* $Id: rand.c,v 1.39 2000/05/22 17:31:41 hholzgra Exp $ */ #include <stdlib.h> @@ -267,6 +267,8 @@ convert_to_long(p_max); if (p_max->value.lval-p_min->value.lval <= 0) { php3_error(E_WARNING,"rand(): Invalid range: %ld..%ld", p_min->value.lval, p_max->value.lval); + } else if (p_max->value.lval-p_min->value.lval > RAND_MAX){ + php3_error(E_WARNING,"rand(): Invalid range: %ld..%ld", p_min->value.lval, p_max->value.lval); } break; default: @@ -311,7 +313,7 @@ */ if (p_min && p_max) { /* implement range */ return_value->value.lval = p_min->value.lval + - (int)((double)(p_max->value.lval - p_min->value.lval + 1) * return_value->value.lval/(PHP_RAND_MAX+1.0)); + (int)((double)(p_max->value.lval - p_min->value.lval + 1.0) * return_value->value.lval/(PHP_RAND_MAX+1.0)); } } /* }}} */ @@ -331,8 +333,10 @@ } convert_to_long(p_min); convert_to_long(p_max); - if (p_max->value.lval-p_min->value.lval <= 0) { - php3_error(E_WARNING,"mtrand(): Invalid range: %ld..%ld", p_min->value.lval, p_max->value.lval); + if (p_max->value.lval-p_min->value.lval <=0) { + php3_error(E_WARNING,"mt_rand(): Invalid range: %ld..%ld", p_min->value.lval, p_max->value.lval); + }else if (p_max->value.lval-p_min->value.lval > MT_RAND_MAX){ + php3_error(E_WARNING,"mt_rand(): Invalid range: %ld..%ld", p_min->value.lval, p_max->value.lval); } break; default: @@ -354,7 +358,7 @@ /* see the comment in the php3_rand() function about this ugly algorithm */ if (p_min && p_max) { /* implement range */ return_value->value.lval = p_min->value.lval + - (int)((double)(p_max->value.lval - p_min->value.lval + 1) * return_value->value.lval/(MT_RAND_MAX+1.0)); + (int)((double)(p_max->value.lval - p_min->value.lval + 1.0) * return_value->value.lval/(MT_RAND_MAX+1.0)); } } /* }}} */

« previous php.dev (#19235) next »