From: Mark Wooding Date: Sat, 23 Dec 2023 14:31:14 +0000 (+0000) Subject: Merge branch '2.4.x' into 2.5.x X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/catacomb/commitdiff_plain/refs/heads/2.5.x?hp=407d0f49d802d4cdb13022bf8466fcc9ef7a3c99 Merge branch '2.4.x' into 2.5.x * 2.4.x: rand/rand.c (rand_gate): Evolve r->ibits in a more sensible manner. rand/rand.c (rand_getgood): Stretch the output buffer if necessary. --- diff --git a/rand/rand.c b/rand/rand.c index 6787c11a..01e6422a 100644 --- a/rand/rand.c +++ b/rand/rand.c @@ -342,7 +342,7 @@ void rand_gate(rand_pool *r) r->o = RAND_SECSZ; r->obits += r->ibits; if (r->obits > RAND_OBITS) { - r->ibits = r->obits - r->ibits; + r->ibits = r->obits - RAND_OBITS; r->obits = RAND_OBITS; } else r->ibits = 0; @@ -482,11 +482,15 @@ void rand_getgood(rand_pool *r, void *p, size_t sz) chunk = r->obits / 8; } - if (chunk + r->o > RAND_BUFSZ) + if (chunk + r->o <= RAND_BUFSZ) { + memcpy(o, r->buf + r->o, chunk); + r->o += chunk; + } else { chunk = RAND_BUFSZ - r->o; + memcpy(o, r->buf + r->o, chunk); + rand_stretch(r); + } - memcpy(o, r->buf + r->o, chunk); - r->o += chunk; r->obits -= chunk * 8; o += chunk; sz -= chunk;