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