sniper Sun Aug 10 20:42:29 2003 EDT
Modified files:
/php-src/ext/standard php_rand.h rand.c
Log:
- Fixed bug #25007 (rand() & mt_rand() seed RNG every call).
# Also cleaned up the code a bit with this fix.
Index: php-src/ext/standard/php_rand.h
diff -u php-src/ext/standard/php_rand.h:1.22 php-src/ext/standard/php_rand.h:1.23
--- php-src/ext/standard/php_rand.h:1.22 Fri Aug 8 09:34:38 2003
+++ php-src/ext/standard/php_rand.h Sun Aug 10 20:42:29 2003
@@ -20,7 +20,7 @@
| Based on code from: Shawn Cokus <[EMAIL PROTECTED]> |
+----------------------------------------------------------------------+
*/
-/* $Id: php_rand.h,v 1.22 2003/08/08 13:34:38 iliaa Exp $ */
+/* $Id: php_rand.h,v 1.23 2003/08/11 00:42:29 sniper Exp $ */
#ifndef PHP_RAND_H
#define PHP_RAND_H
@@ -44,6 +44,12 @@
/* MT Rand */
#define PHP_MT_RAND_MAX ((long) (0x7FFFFFFF)) /* (1<<31) - 1 */
+
+#ifdef PHP_WIN32
+#define GENERATE_SEED() ((long) (time(0) * GetCurrentProcessId() * 1000000 *
php_combined_lcg(TSRMLS_C)))
+#else
+#define GENERATE_SEED() ((long) (time(0) * getpid() * 1000000 *
php_combined_lcg(TSRMLS_C)))
+#endif
PHPAPI void php_srand(long seed TSRMLS_DC);
PHPAPI long php_rand(TSRMLS_D);
Index: php-src/ext/standard/rand.c
diff -u php-src/ext/standard/rand.c:1.63 php-src/ext/standard/rand.c:1.64
--- php-src/ext/standard/rand.c:1.63 Tue Jun 10 16:03:38 2003
+++ php-src/ext/standard/rand.c Sun Aug 10 20:42:29 2003
@@ -20,7 +20,7 @@
| Based on code from: Shawn Cokus <[EMAIL PROTECTED]> |
+----------------------------------------------------------------------+
*/
-/* $Id: rand.c,v 1.63 2003/06/10 20:03:38 imajes Exp $ */
+/* $Id: rand.c,v 1.64 2003/08/11 00:42:29 sniper Exp $ */
#include <stdlib.h>
@@ -53,6 +53,9 @@
srand((unsigned int) seed);
# endif
#endif
+
+ /* Seed only once */
+ BG(rand_is_seeded) = 1;
}
/* }}} */
@@ -198,6 +201,9 @@
for (BG(left) = 0, *s++ = x, j = N; --j;
*s++ = (x *= 69069U) & 0xFFFFFFFFU);
+
+ /* Seed only once */
+ BG(mt_rand_is_seeded) = 1;
}
/* }}} */
@@ -246,12 +252,6 @@
}
/* }}} */
-#ifdef PHP_WIN32
-#define GENERATE_SEED() ((long) (time(0) * GetCurrentProcessId() * 1000000 *
php_combined_lcg(TSRMLS_C)))
-#else
-#define GENERATE_SEED() ((long) (time(0) * getpid() * 1000000 *
php_combined_lcg(TSRMLS_C)))
-#endif
-
/* {{{ proto void srand([int seed])
Seeds random number generator */
PHP_FUNCTION(srand)
@@ -265,7 +265,6 @@
seed = GENERATE_SEED();
php_srand(seed TSRMLS_CC);
- BG(rand_is_seeded) = 1;
}
/* }}} */
@@ -282,7 +281,6 @@
seed = GENERATE_SEED();
php_mt_srand(seed TSRMLS_CC);
- BG(mt_rand_is_seeded) = 1;
}
/* }}} */
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php