From 6777531a2d3367ef3cee933d7a36945eecb37090 Mon Sep 17 00:00:00 2001 From: Bas van Kervel Date: Fri, 19 Feb 2016 12:06:58 +0100 Subject: console: seed random number generator --- jsre/jsre.go | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'jsre/jsre.go') diff --git a/jsre/jsre.go b/jsre/jsre.go index a4c9d970b..f4464910d 100644 --- a/jsre/jsre.go +++ b/jsre/jsre.go @@ -18,8 +18,11 @@ package jsre import ( + crand "crypto/rand" + "encoding/binary" "fmt" "io/ioutil" + "math/rand" "sync" "time" @@ -70,6 +73,18 @@ func New(assetPath string) *JSRE { return re } +// randomSource returns a pseudo random value generator. +func randomSource() *rand.Rand { + bytes := make([]byte, 8) + seed := time.Now().UnixNano() + if _, err := crand.Read(bytes); err == nil { + seed = int64(binary.LittleEndian.Uint64(bytes)) + } + + src := rand.NewSource(seed) + return rand.New(src) +} + // This function runs the main event loop from a goroutine that is started // when JSRE is created. Use Stop() before exiting to properly stop it. // The event loop processes vm access requests from the evalQueue in a @@ -81,6 +96,9 @@ func New(assetPath string) *JSRE { // called from JS through an RPC call. func (self *JSRE) runEventLoop() { vm := otto.New() + r := randomSource() + vm.SetRandomSource(r.Float64) + registry := map[*jsTimer]*jsTimer{} ready := make(chan *jsTimer) -- cgit v1.2.3