cvs: php4 /ext/standard/ rand.c
[email protected] ("Hartmut Holzgraefe")
| Newsgroups | php.version4 |
|---|---|
| Message-ID | <cvshholzgra959027846@cvsserver> |
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 <[email protected]> |
+----------------------------------------------------------------------+
*/
-/* $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));
}
}
/* }}} */