diff options
-rw-r--r-- | src/corelib/tools/qhash.cpp | 8 | ||||
-rw-r--r-- | src/tools/qdoc/main.cpp | 2 | ||||
-rw-r--r-- | src/tools/uic/main.cpp | 3 |
3 files changed, 9 insertions, 4 deletions
diff --git a/src/corelib/tools/qhash.cpp b/src/corelib/tools/qhash.cpp index ca645636e4..7200ea7993 100644 --- a/src/corelib/tools/qhash.cpp +++ b/src/corelib/tools/qhash.cpp @@ -222,12 +222,13 @@ uint qHash(QLatin1String key, uint seed) Q_DECL_NOTHROW */ static uint qt_create_qhash_seed() { + uint seed = 0; + +#ifndef QT_BOOTSTRAPPED QByteArray envSeed = qgetenv("QT_HASH_SEED"); if (!envSeed.isNull()) return envSeed.toUInt(); - uint seed = 0; - #ifdef Q_OS_UNIX int randomfd = qt_safe_open("/dev/urandom", O_RDONLY); if (randomfd == -1) @@ -254,17 +255,16 @@ static uint qt_create_qhash_seed() seed ^= timestamp; seed ^= (timestamp >> 32); -#ifndef QT_BOOTSTRAPPED quint64 pid = QCoreApplication::applicationPid(); seed ^= pid; seed ^= (pid >> 32); -#endif // QT_BOOTSTRAPPED quintptr seedPtr = reinterpret_cast<quintptr>(&seed); seed ^= seedPtr; #if QT_POINTER_SIZE == 8 seed ^= (seedPtr >> 32); #endif +#endif // QT_BOOTSTRAPPED return seed; } diff --git a/src/tools/qdoc/main.cpp b/src/tools/qdoc/main.cpp index 398d188464..3d2ee409b0 100644 --- a/src/tools/qdoc/main.cpp +++ b/src/tools/qdoc/main.cpp @@ -542,6 +542,7 @@ static void processQdocconfFile(const QString &fileName) Generator::debugSegfault("qdoc finished!"); } +extern Q_CORE_EXPORT QBasicAtomicInt qt_qhash_seed; QT_END_NAMESPACE int main(int argc, char **argv) @@ -549,6 +550,7 @@ int main(int argc, char **argv) QT_USE_NAMESPACE #ifndef QT_BOOTSTRAPPED + qt_qhash_seed.testAndSetRelaxed(-1, 0); // set the hash seed to 0 if it wasn't set yet QCoreApplication app(argc, argv); #endif diff --git a/src/tools/uic/main.cpp b/src/tools/uic/main.cpp index cb2bd430ff..12b0ee6737 100644 --- a/src/tools/uic/main.cpp +++ b/src/tools/uic/main.cpp @@ -52,9 +52,12 @@ #include <qcommandlineparser.h> QT_BEGIN_NAMESPACE +extern Q_CORE_EXPORT QBasicAtomicInt qt_qhash_seed; int runUic(int argc, char *argv[]) { + qt_qhash_seed.testAndSetRelaxed(-1, 0); // set the hash seed to 0 if it wasn't set yet + QCoreApplication app(argc, argv); QCoreApplication::setApplicationVersion(QString::fromLatin1(QT_VERSION_STR)); |