diff --git a/src/vmime/platforms/posix/posixHandler.cpp b/src/vmime/platforms/posix/posixHandler.cpp index 8becf6ad..db9c658a 100644 --- a/src/vmime/platforms/posix/posixHandler.cpp +++ b/src/vmime/platforms/posix/posixHandler.cpp @@ -275,17 +275,20 @@ shared_ptr posixHandler::getChildProcessFa void posixHandler::generateRandomBytes(unsigned char* buffer, const unsigned int count) { int fd = open("/dev/urandom", O_RDONLY); + ssize_t have = 0; if (fd != -1) { - read(fd, buffer, count); + have = read(fd, buffer, count); close(fd); + if (have < 0) + have = 0; - } else { // fallback + } - for (unsigned int i = 0 ; i < count ; ++i) { - buffer[i] = static_cast (rand() % 255); - } + // fallback + for (unsigned int i = have ; i < count ; ++i) { + buffer[i] = static_cast (rand() % 256); } }