Date: 05/22/00
- Next message: Zeev Suraski: "Re: [PHP-DEV] cvsweb..."
- Previous message: Andrei Zmievski: "Re: [PHP-DEV] cvsweb..."
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
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 <email protected>> |
+----------------------------------------------------------------------+
*/
-/* $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));
}
}
/* }}} */
-- PHP Development Mailing List <http://www.php.net/> To unsubscribe, e-mail: php-dev-unsubscribe <email protected> For additional commands, e-mail: php-dev-help <email protected> To contact the list administrators, e-mail: php-list-admin <email protected>
- Next message: Zeev Suraski: "Re: [PHP-DEV] cvsweb..."
- Previous message: Andrei Zmievski: "Re: [PHP-DEV] cvsweb..."
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]

