diff options
| -rw-r--r-- | code/client/cl_main.c | 8 | ||||
| -rw-r--r-- | code/qcommon/common.c | 8 | ||||
| -rw-r--r-- | code/renderer/tr_noise.c | 6 | ||||
| -rw-r--r-- | code/server/sv_client.c | 3 | ||||
| -rw-r--r-- | code/server/sv_init.c | 3 | 
5 files changed, 17 insertions, 11 deletions
| diff --git a/code/client/cl_main.c b/code/client/cl_main.c index 08ee747..01c044a 100644 --- a/code/client/cl_main.c +++ b/code/client/cl_main.c @@ -1306,8 +1306,12 @@ void CL_RequestMotd( void ) {  		BigShort( cls.updateServer.port ) );  	info[0] = 0; - -	Com_sprintf( cls.updateChallenge, sizeof( cls.updateChallenge ), "%i", (random() << 16) ^ random()); +  // NOTE TTimo xoring against Com_Milliseconds, otherwise we may not have a true randomization +  // only srand I could catch before here is tr_noise.c l:26 srand(1001) +  // https://zerowing.idsoftware.com/bugzilla/show_bug.cgi?id=382 +  // NOTE: the Com_Milliseconds xoring only affects the lower 16-bit word, +  //   but I decided it was enough randomization +	Com_sprintf( cls.updateChallenge, sizeof( cls.updateChallenge ), "%i", ((rand() << 16) ^ rand()) ^ Com_Milliseconds());  	Info_SetValueForKey( info, "challenge", cls.updateChallenge );  	Info_SetValueForKey( info, "renderer", cls.glconfig.renderer_string ); diff --git a/code/qcommon/common.c b/code/qcommon/common.c index 0f28072..fb9f664 100644 --- a/code/qcommon/common.c +++ b/code/qcommon/common.c @@ -2499,7 +2499,6 @@ static void Com_DetectAltivec(void)  	}  } -  /*  =================  Com_InitRand @@ -2509,8 +2508,8 @@ Seed the random number generator, if possible with an OS supplied random seed.  static void Com_InitRand(void)  {  	unsigned int seed; -	 -	if(Sys_Random(&seed, sizeof(seed))) + +	if(Sys_RandomBytes(&seed, sizeof(seed)))  		srand(seed);  	else  		srand(time(NULL)); @@ -3341,7 +3340,8 @@ void Com_RandomBytes( byte *string, int len )  		return;  	Com_Printf( "Com_RandomBytes: using weak randomization\n" ); +	srand( time( 0 ) );  	for( i = 0; i < len; i++ ) -		string[i] = (unsigned char)( random() % 255 ); +		string[i] = (unsigned char)( rand() % 255 );  } diff --git a/code/renderer/tr_noise.c b/code/renderer/tr_noise.c index f27e6ab..5d550a3 100644 --- a/code/renderer/tr_noise.c +++ b/code/renderer/tr_noise.c @@ -44,10 +44,12 @@ void R_NoiseInit( void )  {  	int i; +	srand( 1001 ); +  	for ( i = 0; i < NOISE_SIZE; i++ )  	{ -		s_noise_table[i] = ( float ) ( ( ( random() / ( float ) RAND_MAX ) * 2.0 - 1.0 ) ); -		s_noise_perm[i] = ( unsigned char ) ( random() / ( float ) RAND_MAX * 255 ); +		s_noise_table[i] = ( float ) ( ( ( rand() / ( float ) RAND_MAX ) * 2.0 - 1.0 ) ); +		s_noise_perm[i] = ( unsigned char ) ( rand() / ( float ) RAND_MAX * 255 );  	}  } diff --git a/code/server/sv_client.c b/code/server/sv_client.c index 6c3e2e0..f3d547c 100644 --- a/code/server/sv_client.c +++ b/code/server/sv_client.c @@ -72,8 +72,7 @@ void SV_GetChallenge( netadr_t from ) {  	if (i == MAX_CHALLENGES) {  		// this is the first time this client has asked for a challenge  		challenge = &svs.challenges[oldest]; - -		challenge->challenge = ( (random() << 16) ^ random() ) ^ svs.time; +		challenge->challenge = ( (rand() << 16) ^ rand() ) ^ svs.time;  		challenge->adr = from;  		challenge->firstTime = svs.time;  		challenge->time = svs.time; diff --git a/code/server/sv_init.c b/code/server/sv_init.c index 47c9810..874aeaf 100644 --- a/code/server/sv_init.c +++ b/code/server/sv_init.c @@ -475,7 +475,8 @@ void SV_SpawnServer( char *server, qboolean killBots ) {  	Cvar_Set("cl_paused", "0");  	// get a new checksum feed and restart the file system -	sv.checksumFeed = ( ((int) random() << 16) ^ random() ) ^ Com_Milliseconds(); +	srand(Com_Milliseconds()); +	sv.checksumFeed = ( ((int) rand() << 16) ^ rand() ) ^ Com_Milliseconds();  	FS_Restart( sv.checksumFeed );  	CM_LoadMap( va("maps/%s.bsp", server), qfalse, &checksum ); | 
