cvs: php4 /ext/standard/ rand.c

From: Date: Mon, 22 May 2000 20:37:26 +0000
Subject: cvs: php4 /ext/standard/ rand.c
Groups: php.version4 
Request: Send a blank email to php-version4+get-15475@lists.php.net to get a copy of this message
hholzgra Mon May 22 22:37:26 2000 EDT Modified files: /php4/ext/standard 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: php4/ext/standard/rand.c diff -u php4/ext/standard/rand.c:1.17 php4/ext/standard/rand.c:1.18 --- php4/ext/standard/rand.c:1.17 Thu May 18 17:34:35 2000 +++ php4/ext/standard/rand.c Mon May 22 22:37:26 2000 @@ -19,7 +19,7 @@ | Based on code from: Shawn Cokus <Cokus@math.washington.edu> | +----------------------------------------------------------------------+ */ -/* $Id: rand.c,v 1.17 2000/05/18 15:34:35 zeev Exp $ */ +/* $Id: rand.c,v 1.18 2000/05/22 20:37:26 hholzgra Exp $ */ #include <stdlib.h> @@ -243,6 +243,8 @@ convert_to_long_ex(p_max); if ((*p_max)->value.lval-(*p_min)->value.lval <= 0) { php_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: @@ -287,7 +289,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)); } } /* }}} */ @@ -308,7 +310,9 @@ convert_to_long_ex(p_min); convert_to_long_ex(p_max); if ((*p_max)->value.lval-(*p_min)->value.lval <= 0) { - php_error(E_WARNING,"mtrand(): Invalid range: %ld..%ld", (*p_min)->value.lval, (*p_max)->value.lval); + php_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: @@ -329,7 +333,7 @@ if (p_min && p_max) { /* implement range */ return_value->value.lval = (*p_min)->value.lval + - (long)((double)((*p_max)->value.lval - (*p_min)->value.lval + 1) * return_value->value.lval/(MT_RAND_MAX+1.0)); + (long)((double)((*p_max)->value.lval - (*p_min)->value.lval + 1.0) * return_value->value.lval/(MT_RAND_MAX+1.0)); } } /* }}} */

« previous php.version4 (#15475) next »