Explorar o código

Better UUID randomness

David Marcec %!s(int64=8) %!d(string=hai) anos
pai
achega
10f494eefe
Modificáronse 1 ficheiros con 7 adicións e 2 borrados
  1. 7 2
      src/core/hle/service/acc/profile_manager.h

+ 7 - 2
src/core/hle/service/acc/profile_manager.h

@@ -5,6 +5,7 @@
 #pragma once
 
 #include <array>
+#include <random>
 #include "boost/optional.hpp"
 #include "common/common_types.h"
 #include "common/swap.h"
@@ -38,8 +39,12 @@ struct UUID {
 
     // TODO(ogniK): Properly generate uuids based on RFC-4122
     const UUID& Generate() {
-        uuid[0] = (static_cast<u64>(std::rand()) << 32) | std::rand();
-        uuid[1] = (static_cast<u64>(std::rand()) << 32) | std::rand();
+        std::random_device device;
+        std::mt19937 gen(device());
+        std::uniform_int_distribution<uint64_t> distribution(1,
+                                                             std::numeric_limits<uint64_t>::max());
+        uuid[0] = distribution(gen);
+        uuid[1] = distribution(gen);
         return *this;
     }