[Libreoffice-commits] core.git: comphelper/source

Norbert Thiebaud nthiebaud at gmail.com
Tue May 5 03:42:20 PDT 2015


 comphelper/source/misc/random.cxx |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

New commits:
commit 011563a083da45b7c6805ec42778672d4a0fb0dc
Author: Norbert Thiebaud <nthiebaud at gmail.com>
Date:   Fri May 1 22:58:26 2015 -0500

    seed mt19937 with random data
    
    time(NULL) is a poor seed. It is quite predictable and
    multiple instance starting in the same second will get the same seed
    and therefore the same pseudo random number sequence
    
    Use std::random_device, witch is meant to provide 'true' random
    data.. mix time(NULL) just in case the std implementation is crappy.
    
    PS: sadly std::random_device.entropy() cannot be relied on
    as clang and gcc are known to return 0 despite their random_device
    being non-deterministic, hence the prophylactic systematic
    mixing with time(null)
    
    Change-Id: I44dab9970f8f0388dc1c99e9816d49d1afbecf18
    Reviewed-on: https://gerrit.libreoffice.org/15591
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Michael Stahl <mstahl at redhat.com>

diff --git a/comphelper/source/misc/random.cxx b/comphelper/source/misc/random.cxx
index ea6c6a1..84e3176 100644
--- a/comphelper/source/misc/random.cxx
+++ b/comphelper/source/misc/random.cxx
@@ -37,12 +37,13 @@ struct RandomNumberGenerator
     STD_RNG_ALGO global_rng;
     RandomNumberGenerator()
     {
+        std::random_device rd;
         // initialises the state of the global random number generator
         // should only be called once.
         // (note, a few std::variate_generator<> (like normal) have their
         // own state which would need a reset as well to guarantee identical
         // sequence of numbers, e.g. via myrand.distribution().reset())
-        global_rng.seed(time(NULL));
+        global_rng.seed(rd() ^ time(nullptr));
     }
 };
 


More information about the Libreoffice-commits mailing list