From 77ae5d9b5e9c86ff1c9b73b1f7cf63c59eb82d43 Mon Sep 17 00:00:00 2001 From: Jan Engelhardt Date: Tue, 8 Jul 2025 10:27:05 +0200 Subject: [PATCH 1/2] posix: avoid having undefined bytes in generateRandomBytes result posixHandler.cpp: In member function 'virtual void vmime::platforms::posix::posixHandler::generateRandomBytes(unsigned char*, unsigned int)': posixHandler.cpp:281:21: warning: ignoring return value of 'ssize_t read(int, void*, size_t)' declared with attribute 'warn_unused_result' [-Wunused-result] 281 | read(fd, buffer, count); --- src/vmime/platforms/posix/posixHandler.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/vmime/platforms/posix/posixHandler.cpp b/src/vmime/platforms/posix/posixHandler.cpp index 8becf6ad..0b33afad 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() % 255); } } From b4e655d5e1adabf0ec1c67ad722d23cc48356394 Mon Sep 17 00:00:00 2001 From: Jan Engelhardt Date: Tue, 8 Jul 2025 10:36:40 +0200 Subject: [PATCH 2/2] posix: let generateRandomBytes use the entire char range x % 255 produces values in the range [0..254], which is wrong. --- src/vmime/platforms/posix/posixHandler.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vmime/platforms/posix/posixHandler.cpp b/src/vmime/platforms/posix/posixHandler.cpp index 0b33afad..db9c658a 100644 --- a/src/vmime/platforms/posix/posixHandler.cpp +++ b/src/vmime/platforms/posix/posixHandler.cpp @@ -288,7 +288,7 @@ void posixHandler::generateRandomBytes(unsigned char* buffer, const unsigned int // fallback for (unsigned int i = have ; i < count ; ++i) { - buffer[i] = static_cast (rand() % 255); + buffer[i] = static_cast (rand() % 256); } }