On Mon, 2012-01-16 at 08:38 +1100, Bojan Smojver wrote:
> That is true. In fact, my first code to the list just used ht. We
> could use ht and time to get "random" values. Same attack vectors as
> noted by you above apply, of course.
Maybe like this?
--
Bojan
Index: tables/apr_hash.c
===================================================================
--- tables/apr_hash.c (revision 1231774)
+++ tables/apr_hash.c (working copy)
@@ -19,9 +19,6 @@
#include "apr_general.h"
#include "apr_pools.h"
#include "apr_time.h"
-#if APR_HAVE_STDLIB_H
-#include <stdlib.h> /* for rand, srand */
-#endif
#include "apr_hash.h"
@@ -106,8 +103,8 @@
ht->free = NULL;
ht->count = 0;
ht->max = INITIAL_MAX;
- srand((unsigned int)((now >> 32) ^ now ^ (apr_uintptr_t)ht));
- ht->seed = (unsigned int)(rand());
+ ht->seed = (unsigned int)(((now >> 32) ^ (apr_uintptr_t)ht) ^
+ (now ^ (apr_uintptr_t)&now));
ht->array = alloc_array(ht, ht->max);
ht->hash_func = NULL;