cvs: php4 /ext/standard array.c
| From: | Dan Kalowsky | Date: | Thu, 15 Aug 2002 19:09:06 +0000 |
| Subject: | cvs: php4 /ext/standard array.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-13389@lists.php.net to get a copy of this message | ||
kalowsky Thu Aug 15 15:09:06 2002 EDT
Modified files:
/php4/ext/standard array.c
Log:
Fix for bug #18401, makes shuffle() properly generate all possibilities.
Patch provided by Adam Trachtenberg <adam@trachtenberg.com>
Index: php4/ext/standard/array.c
diff -u php4/ext/standard/array.c:1.181 php4/ext/standard/array.c:1.182
--- php4/ext/standard/array.c:1.181 Fri Aug 2 20:40:46 2002
+++ php4/ext/standard/array.c Thu Aug 15 15:09:05 2002
@@ -21,7 +21,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: array.c,v 1.181 2002/08/03 00:40:46 rodif_bl Exp $ */
+/* $Id: array.c,v 1.182 2002/08/15 19:09:05 kalowsky Exp $ */
#include "php.h"
#include "php_ini.h"
@@ -1441,7 +1441,7 @@
{
Bucket **elems, *temp;
HashTable *hash;
- int j, n_elems, cur_elem = 0, rnd_idx, n_left;
+ int j, n_elems, rnd_idx, n_left;
n_elems = zend_hash_num_elements(Z_ARRVAL_P(array));
@@ -1457,13 +1457,12 @@
elems[j++] = temp;
while (--n_left) {
rnd_idx = php_rand(TSRMLS_C);
- RAND_RANGE(rnd_idx, cur_elem, n_left, PHP_RAND_MAX);
- if (rnd_idx != cur_elem) {
- temp = elems[cur_elem];
- elems[cur_elem] = elems[rnd_idx];
+ RAND_RANGE(rnd_idx, 0, n_left, PHP_RAND_MAX);
+ if (rnd_idx != n_left) {
+ temp = elems[n_left];
+ elems[n_left] = elems[rnd_idx];
elems[rnd_idx] = temp;
}
- cur_elem++;
}
HANDLE_BLOCK_INTERRUPTIONS();