Skip to content

Commit 9141751

Browse files
committed
Port seed fix from libsass 3 develop branch
1 parent 4916b9b commit 9141751

File tree

1 file changed

+19
-3
lines changed

1 file changed

+19
-3
lines changed

src/randomize.cpp

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
#include <wincrypt.h>
99
#else
1010
#include <random>
11+
#include <thread>
12+
#include <ctime>
1113
#endif
1214

1315
namespace Sass {
@@ -36,9 +38,23 @@ namespace Sass {
3638
CryptGenRandom(hp, sizeof(seed), (BYTE*)&seed);
3739
CryptReleaseContext(hp, 0);
3840
#else
39-
// Get seed via C++11 API
40-
std::random_device rd;
41-
seed = rd();
41+
// Try to get random number from system
42+
try {
43+
// Get seed via C++11 API
44+
std::random_device rd;
45+
seed = rd();
46+
}
47+
// On certain system this can throw since either
48+
// underlying hardware or software can be buggy.
49+
// https://github.com/sass/libsass/issues/3151
50+
catch (std::exception&) {
51+
}
52+
// Don't trust anyone to be random, so we
53+
// add a little entropy of our own.
54+
seed ^= std::time(NULL) ^ std::clock() ^
55+
std::hash<std::thread::id>()
56+
(std::this_thread::get_id());
57+
// Return entropy
4258
#endif
4359
}
4460
// Use some sensible default

0 commit comments

Comments
 (0)