| This patch removes calls to getentropy() and BCryptGetRandom() because they |
| aren't implemented or supported on certain platforms based on the trybot |
| results I saw. I will try upstreaming a configure script flag soon to replace |
| this patch file. This patch is safe because it reverts the random number |
| generation behavior before a recent libxml upstream patch. |
| |
| diff --git a/dict.c b/dict.c |
| index c843bb7b..96435d52 100644 |
| --- a/dict.c |
| +++ b/dict.c |
| @@ -909,17 +909,12 @@ xmlDictQLookup(xmlDictPtr dict, const xmlChar *prefix, const xmlChar *name) { |
| #ifdef _WIN32 |
| #define WIN32_LEAN_AND_MEAN |
| #include <windows.h> |
| - #include <bcrypt.h> |
| #elif defined(HAVE_GETENTROPY) |
| #ifdef HAVE_UNISTD_H |
| #include <unistd.h> |
| #endif |
| - #ifdef HAVE_SYS_RANDOM_H |
| - #include <sys/random.h> |
| - #endif |
| -#else |
| - #include <time.h> |
| #endif |
| +#include <time.h> |
| |
| static xmlMutex xmlRngMutex; |
| |
| @@ -931,29 +926,6 @@ xmlInitRandom(void) { |
| xmlInitMutex(&xmlRngMutex); |
| |
| { |
| -#ifdef _WIN32 |
| - NTSTATUS status; |
| - |
| - status = BCryptGenRandom(NULL, (unsigned char *) globalRngState, |
| - sizeof(globalRngState), |
| - BCRYPT_USE_SYSTEM_PREFERRED_RNG); |
| - if (!BCRYPT_SUCCESS(status)) { |
| - fprintf(stderr, "libxml2: BCryptGenRandom failed with " |
| - "error code %lu\n", GetLastError()); |
| - abort(); |
| - } |
| -#elif defined(HAVE_GETENTROPY) |
| - while (1) { |
| - if (getentropy(globalRngState, sizeof(globalRngState)) == 0) |
| - break; |
| - |
| - if (errno != EINTR) { |
| - fprintf(stderr, "libxml2: getentropy failed with " |
| - "error code %d\n", errno); |
| - abort(); |
| - } |
| - } |
| -#else |
| int var; |
| |
| globalRngState[0] = |
| @@ -962,7 +934,6 @@ xmlInitRandom(void) { |
| globalRngState[1] = |
| HASH_ROL((unsigned) ((size_t) &xmlRngMutex & 0xFFFFFFFF), 16) ^ |
| HASH_ROL((unsigned) ((size_t) &var & 0xFFFFFFFF), 24); |
| -#endif |
| } |
| } |
| |