If arc4random is used, don't bother compiling in the other fallback methods since they'll never be used. Fixes PR#695 about unreachable code too.

This commit is contained in:
Eric Haszlakiewicz
2021-02-13 03:23:58 +00:00
parent 7c859c54e4
commit f787810890

View File

@@ -20,6 +20,16 @@
#define DEBUG_SEED(s)
#if defined(__APPLE__) || defined(__unix__) || defined(__linux__)
#define HAVE_DEV_RANDOM 1
#endif
#ifdef HAVE_ARC4RANDOM
#undef HAVE_GETRANDOM
#undef HAVE_DEV_RANDOM
#undef HAVE_CRYPTGENRANDOM
#endif
#if defined ENABLE_RDRAND
/* cpuid */
@@ -197,7 +207,7 @@ static int get_getrandom_seed(int *seed)
/* get_dev_random_seed */
#if defined(__APPLE__) || defined(__unix__) || defined(__linux__)
#ifdef HAVE_DEV_RANDOM
#include <fcntl.h>
#include <string.h>
@@ -207,8 +217,6 @@ static int get_getrandom_seed(int *seed)
#include <stdlib.h>
#include <sys/stat.h>
#define HAVE_DEV_RANDOM 1
static const char *dev_random_file = "/dev/urandom";
static int get_dev_random_seed(int *seed)
@@ -294,6 +302,7 @@ static int get_cryptgenrandom_seed(int *seed)
/* get_time_seed */
#ifndef HAVE_ARC4RANDOM
#include <time.h>
static int get_time_seed(void)
@@ -302,12 +311,12 @@ static int get_time_seed(void)
return (unsigned)time(NULL) * 433494437;
}
#endif
/* json_c_get_random_seed */
int json_c_get_random_seed(void)
{
int seed;
#ifdef OVERRIDE_GET_RANDOM_SEED
OVERRIDE_GET_RANDOM_SEED;
#endif
@@ -318,18 +327,28 @@ int json_c_get_random_seed(void)
#ifdef HAVE_ARC4RANDOM
/* arc4random never fails, so use it if it's available */
return arc4random();
#endif
#else
#ifdef HAVE_GETRANDOM
if (get_getrandom_seed(&seed) == 0)
return seed;
{
int seed;
if (get_getrandom_seed(&seed) == 0)
return seed;
}
#endif
#if defined HAVE_DEV_RANDOM && HAVE_DEV_RANDOM
if (get_dev_random_seed(&seed) == 0)
return seed;
{
int seed;
if (get_dev_random_seed(&seed) == 0)
return seed;
}
#endif
#if defined HAVE_CRYPTGENRANDOM && HAVE_CRYPTGENRANDOM
if (get_cryptgenrandom_seed(&seed) == 0)
return seed;
{
int seed;
if (get_cryptgenrandom_seed(&seed) == 0)
return seed;
}
#endif
return get_time_seed();
#endif /* !HAVE_ARC4RANDOM */
}