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));
 	}
 }
 /* }}} */
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.