From 267c26d20b683c21ad117c367f0fa75b57bb04af Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Fri, 17 Jun 2022 07:12:12 +0900 Subject: [PATCH] mruby-random/random.c: randomize Random::DEFAULT. Using time(2) and randomized pointer address. May not work well with old OSes without process randomiser. --- mrbgems/mruby-random/src/random.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/mrbgems/mruby-random/src/random.c b/mrbgems/mruby-random/src/random.c index 3046a7644..6d234a120 100644 --- a/mrbgems/mruby-random/src/random.c +++ b/mrbgems/mruby-random/src/random.c @@ -421,8 +421,12 @@ void mrb_mruby_random_gem_init(mrb_state *mrb) mrb_define_method(mrb, array, "shuffle!", mrb_ary_shuffle_bang, MRB_ARGS_OPT(1)); mrb_define_method(mrb, array, "sample", mrb_ary_sample, MRB_ARGS_OPT(2)); - mrb_const_set(mrb, mrb_obj_value(random), MRB_SYM(DEFAULT), - mrb_obj_new(mrb, random, 0, NULL)); + mrb_value d = mrb_obj_new(mrb, random, 0, NULL); + rand_state *t = random_ptr(d); + mrb_const_set(mrb, mrb_obj_value(random), MRB_SYM(DEFAULT), d); + + uint32_t seed = (uint32_t)time(NULL); + rand_seed(t, seed ^ (uint32_t)t); } void mrb_mruby_random_gem_final(mrb_state *mrb)