rand/rand.c: Rearrange some comparisons to avoid arithmetic overflow.
authorMark Wooding <mdw@distorted.org.uk>
Sat, 23 Dec 2023 14:18:18 +0000 (14:18 +0000)
committerMark Wooding <mdw@distorted.org.uk>
Sat, 23 Dec 2023 14:33:09 +0000 (14:33 +0000)
rand/rand.c

index 90e8193..0d0650e 100644 (file)
@@ -413,7 +413,7 @@ void rand_get(rand_pool *r, void *p, size_t sz)
   if (!sz)
     return;
   for (;;) {
-    if (r->o + sz <= RAND_BUFSZ) {
+    if (sz <= RAND_BUFSZ - r->o) {
       memcpy(o, r->buf + r->o, sz);
       r->o += sz;
       break;
@@ -475,7 +475,7 @@ void rand_getgood(rand_pool *r, void *p, size_t sz)
        chunk = r->obits / 8;
     }
 
-    if (chunk + r->o <= RAND_BUFSZ) {
+    if (chunk <= RAND_BUFSZ - r->o) {
       memcpy(o, r->buf + r->o, chunk);
       r->o += chunk;
     } else {