From 08755e04e14d9fb9ce21d47b2cb7d72f601807a7 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Thu, 21 Nov 2013 23:22:45 -0800 Subject: [PATCH] Support randombytes() with size == 0, but don't force implementations to support it --- src/libsodium/randombytes/randombytes.c | 4 +++- .../randombytes/salsa20/randombytes_salsa20_random.c | 1 + src/libsodium/randombytes/sysrandom/randombytes_sysrandom.c | 1 + 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/libsodium/randombytes/randombytes.c b/src/libsodium/randombytes/randombytes.c index 3a223d4f..07e23410 100644 --- a/src/libsodium/randombytes/randombytes.c +++ b/src/libsodium/randombytes/randombytes.c @@ -46,7 +46,9 @@ randombytes_uniform(const uint32_t upper_bound) void randombytes_buf(void * const buf, const size_t size) { - implementation->buf(buf, size); + if (size > (size_t) 0U) { + implementation->buf(buf, size); + } } int diff --git a/src/libsodium/randombytes/salsa20/randombytes_salsa20_random.c b/src/libsodium/randombytes/salsa20/randombytes_salsa20_random.c index bfac46c8..0df99007 100644 --- a/src/libsodium/randombytes/salsa20/randombytes_salsa20_random.c +++ b/src/libsodium/randombytes/salsa20/randombytes_salsa20_random.c @@ -85,6 +85,7 @@ safe_read(const int fd, void * const buf_, size_t count) unsigned char *buf = (unsigned char *) buf_; ssize_t readnb; + assert(count > (size_t) 0U); do { while ((readnb = read(fd, buf, count)) < (ssize_t) 0 && errno == EINTR); diff --git a/src/libsodium/randombytes/sysrandom/randombytes_sysrandom.c b/src/libsodium/randombytes/sysrandom/randombytes_sysrandom.c index 68b2d7ae..40334cf0 100644 --- a/src/libsodium/randombytes/sysrandom/randombytes_sysrandom.c +++ b/src/libsodium/randombytes/sysrandom/randombytes_sysrandom.c @@ -45,6 +45,7 @@ safe_read(const int fd, void * const buf_, size_t count) unsigned char *buf = (unsigned char *) buf_; ssize_t readnb; + assert(count > (size_t) 0U); do { while ((readnb = read(fd, buf, count)) < (ssize_t) 0 && errno == EINTR);