История изменений
Исправление monk, (текущая версия) :
Ещё красивый пример:
struct timeval tv;
unsigned long junk;
gettimeofday(&tv, NULL);
srandom((getpid() << 16) ^ tv.tv_sec ^ tv.tv_usec ^ junk);
clang превращает в
struct timeval tv;
unsigned long junk;
gettimeofday(&tv, NULL);
getpid();
srandom(0);
Исходная версия monk, :
Ещё красивый пример:
struct timeval tv;
unsigned long junk;
gettimeofday(&tv, NULL);
srandom((getpid() << 16) ^ tv.tv_sec ^ tv.tv_usec ^ junk);
clang превращает в struct timeval tv; unsigned long junk; gettimeofday(&tv, NULL); getpid(); srandom(0); Так как результат вычисления с неинициализированной переменной — UB. В результате «генератор случайных чисел» становится совсем неслучайным.