unit-tests: Seed chunk_hash() only once, but before creating any hashtables
Due to the removal of pthread_once, we manually create the seed for chunk_hash(). With the new testable functions interface, this won't work for the hashtable initiated using __attribute__((constructor)). Enforce seeding before creating that hashtable.
This commit is contained in:
@@ -917,10 +917,17 @@ static u_char static_key[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
|
||||
*/
|
||||
void chunk_hash_seed()
|
||||
{
|
||||
static bool seeded = FALSE;
|
||||
ssize_t len;
|
||||
size_t done = 0;
|
||||
int fd;
|
||||
|
||||
if (seeded)
|
||||
{
|
||||
/* just once to have the same seed during the whole process lifetimes */
|
||||
return;
|
||||
}
|
||||
|
||||
fd = open("/dev/urandom", O_RDONLY);
|
||||
if (fd >= 0)
|
||||
{
|
||||
@@ -944,6 +951,7 @@ void chunk_hash_seed()
|
||||
key[done] = (u_char)random();
|
||||
}
|
||||
}
|
||||
seeded = TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -343,7 +343,8 @@ bool chunk_printable(chunk_t chunk, chunk_t *sane, char replace);
|
||||
* Seed initial key for chunk_hash().
|
||||
*
|
||||
* This call should get invoked once during startup. This is usually done
|
||||
* by calling library_init().
|
||||
* by calling library_init(). Calling it multiple times is safe, it gets
|
||||
* executed just once.
|
||||
*/
|
||||
void chunk_hash_seed();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user