summaryrefslogtreecommitdiffstats
path: root/src/corelib
diff options
context:
space:
mode:
authorThiago Macieira <thiago.macieira@intel.com>2017-10-11 13:25:44 +0200
committerThiago Macieira <thiago.macieira@intel.com>2017-10-16 16:25:34 +0000
commit65eed6d5978738b06e047c9bd5d162b2596759f7 (patch)
tree283d7edafd13bacb209f486b6021facffbd57f3b /src/corelib
parenta090076e93487f8e461d9b866b9da1c0c21cb59b (diff)
configure: make C++11 <random> a required functionality
Error out if it's missing or broken (Mersenne Twister not present). This ensures that we never have a low-quality random generator in Qt. Change-Id: I0a103569c81b4711a649fffd14ec80649df7087e Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'src/corelib')
-rw-r--r--src/corelib/configure.json11
-rw-r--r--src/corelib/global/qrandom.cpp19
2 files changed, 9 insertions, 21 deletions
diff --git a/src/corelib/configure.json b/src/corelib/configure.json
index 51e6d1d391..8067ca70f1 100644
--- a/src/corelib/configure.json
+++ b/src/corelib/configure.json
@@ -459,11 +459,6 @@
"condition": "tests.cxx11_future",
"output": [ "publicFeature" ]
},
- "cxx11_random": {
- "label": "C++11 <random>",
- "condition": "tests.cxx11_random",
- "output": [ "privateFeature" ]
- },
"eventfd": {
"label": "eventfd",
"condition": "tests.eventfd",
@@ -869,9 +864,9 @@ ensure that the IDEs they use either set QT_LOGGING_TO_CONSOLE to 1
or are able to read the logged output from journald, syslog or slog2."
},
{
- "type": "warning",
- "condition": "!config.win32 && !config.darwin && !config.bsd && !features.cxx11_random",
- "message": "No high-quality PRNG available for QRandomGenerator fallback.\nIf the HW or OS RNG fails, Qt will abort execution."
+ "type": "error",
+ "condition": "!tests.cxx11_random",
+ "message": "C++11 <random> is required and is missing or failed to compile."
},
{
"type": "error",
diff --git a/src/corelib/global/qrandom.cpp b/src/corelib/global/qrandom.cpp
index bafc312b3e..a7696719d1 100644
--- a/src/corelib/global/qrandom.cpp
+++ b/src/corelib/global/qrandom.cpp
@@ -46,16 +46,15 @@
#include <qthreadstorage.h>
#include <private/qsimd_p.h>
+#include <random>
+
#include <errno.h>
#if QT_CONFIG(getentropy)
# include <sys/random.h>
-#else
-# if QT_CONFIG(cxx11_random)
-# include <random>
-# include "qdeadlinetimer.h"
-# include "qhashfunctions.h"
-# endif
+#elif !defined(Q_OS_BSD4) && !defined(Q_OS_WIN)
+# include "qdeadlinetimer.h"
+# include "qhashfunctions.h"
# if QT_CONFIG(getauxval)
# include <sys/auxv.h>
@@ -258,7 +257,7 @@ static void fallback_fill(quint32 *ptr, qssize_t left) Q_DECL_NOTHROW
// BSDs have arc4random(4) and these work even in chroot(2)
arc4random_buf(ptr, left * sizeof(*ptr));
}
-#elif QT_CONFIG(cxx11_random)
+#else
static QBasicAtomicInteger<unsigned> seed = Q_BASIC_ATOMIC_INITIALIZER(0U);
static void fallback_update_seed(unsigned value)
{
@@ -343,12 +342,6 @@ static void fallback_fill(quint32 *ptr, qssize_t left) Q_DECL_NOTHROW
fallback_update_seed(*ptr);
}
-#else
-static void fallback_update_seed(unsigned) {}
-static Q_NORETURN void fallback_fill(quint32 *, qssize_t)
-{
- qFatal("Random number generator failed and no high-quality backup available");
-}
#endif
static qssize_t fill_cpu(quint32 *buffer, qssize_t count) Q_DECL_NOTHROW