json-c/f787810890b91b2b141ce7630d5be85c5f8cfcc3.patch
2021-07-09 00:22:02 +02:00

109 lines
2.5 KiB
Diff

From f787810890b91b2b141ce7630d5be85c5f8cfcc3 Mon Sep 17 00:00:00 2001
From: Eric Haszlakiewicz <erh+git@nimenees.com>
Date: Sat, 13 Feb 2021 03:23:58 +0000
Subject: [PATCH] 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.
---
random_seed.c | 41 ++++++++++++++++++++++++++++++-----------
1 file changed, 30 insertions(+), 11 deletions(-)
diff --git a/random_seed.c b/random_seed.c
index f3ee7406f4..b2e8ce6773 100644
--- a/random_seed.c
+++ b/random_seed.c
@@ -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 */
}