Collin Funk <[email protected]> writes:

> * src/cksum.c (cksum_slice8, crc32b_sum_stream): Use ckd_add to check
> for overflow.
> ---
>  src/cksum.c | 6 ++----
>  1 file changed, 2 insertions(+), 4 deletions(-)

Oops, forgot about the optimized functions.

Collin

>From 4a842baf35b27d3a8a7c889535757eee04eadb03 Mon Sep 17 00:00:00 2001
Message-ID: <4a842baf35b27d3a8a7c889535757eee04eadb03.1761507087.git.collin.fu...@gmail.com>
From: Collin Funk <[email protected]>
Date: Sun, 26 Oct 2025 12:20:01 -0700
Subject: [PATCH v2] maint: prefer ckd_add for overflow checks

* src/cksum.c (cksum_slice8, crc32b_sum_stream): Use ckd_add to check
for overflow.
* src/cksum_avx2.c (cksum_avx2): Likewise.
* src/cksum_avx512.c (cksum_avx512): Likewise.
* src/cksum_pclmul.c (cksum_pclmul): Likewise.
* src/cksum_vmull.c (cksum_vmull): Likewise.
---
 src/cksum.c        | 6 ++----
 src/cksum_avx2.c   | 3 +--
 src/cksum_avx512.c | 3 +--
 src/cksum_pclmul.c | 3 +--
 src/cksum_vmull.c  | 3 +--
 5 files changed, 6 insertions(+), 12 deletions(-)

diff --git a/src/cksum.c b/src/cksum.c
index fba33f688..a74af07a0 100644
--- a/src/cksum.c
+++ b/src/cksum.c
@@ -239,12 +239,11 @@ cksum_slice8 (FILE *fp, uint_fast32_t *crc_out, uintmax_t *length_out)
     {
       uint32_t *datap;
 
-      if (length + bytes_read < length)
+      if (ckd_add (&length, length, bytes_read))
         {
           errno = EOVERFLOW;
           return false;
         }
-      length += bytes_read;
 
       /* Process multiples of 8 bytes */
       datap = (uint32_t *)buf;
@@ -335,12 +334,11 @@ crc32b_sum_stream (FILE *stream, void *resstream, uintmax_t *reslen)
 
   while ((bytes_read = fread (buf, 1, BUFLEN, stream)) > 0)
     {
-      if (len + bytes_read < len)
+      if (ckd_add (&len, len, bytes_read))
         {
           errno = EOVERFLOW;
           return -1;
         }
-      len += bytes_read;
 
       crc = crc32_update (crc, (char const *)buf, bytes_read);
 
diff --git a/src/cksum_avx2.c b/src/cksum_avx2.c
index b50a5de1a..23ecc66e5 100644
--- a/src/cksum_avx2.c
+++ b/src/cksum_avx2.c
@@ -68,12 +68,11 @@ cksum_avx2 (FILE *fp, uint_fast32_t *crc_out, uintmax_t *length_out)
 
       __m256i *datap;
 
-      if (length + bytes_read < length)
+      if (ckd_add (&length, length, bytes_read))
         {
           errno = EOVERFLOW;
           return false;
         }
-      length += bytes_read;
 
       datap = (__m256i *)buf;
 
diff --git a/src/cksum_avx512.c b/src/cksum_avx512.c
index e62c3e3ac..df6abf569 100644
--- a/src/cksum_avx512.c
+++ b/src/cksum_avx512.c
@@ -75,12 +75,11 @@ cksum_avx512 (FILE *fp, uint_fast32_t *crc_out, uintmax_t *length_out)
 
       __m512i *datap;
 
-      if (length + bytes_read < length)
+      if (ckd_add (&length, length, bytes_read))
         {
           errno = EOVERFLOW;
           return false;
         }
-      length += bytes_read;
 
       datap = (__m512i *)buf;
 
diff --git a/src/cksum_pclmul.c b/src/cksum_pclmul.c
index c47bb9f84..240d475fc 100644
--- a/src/cksum_pclmul.c
+++ b/src/cksum_pclmul.c
@@ -66,12 +66,11 @@ cksum_pclmul (FILE *fp, uint_fast32_t *crc_out, uintmax_t *length_out)
       __m128i fold_data;
       __m128i xor_crc;
 
-      if (length + bytes_read < length)
+      if (ckd_add (&length, length, bytes_read))
         {
           errno = EOVERFLOW;
           return false;
         }
-      length += bytes_read;
 
       datap = (__m128i *)buf;
 
diff --git a/src/cksum_vmull.c b/src/cksum_vmull.c
index fb3b6dcdd..fddfaa47b 100644
--- a/src/cksum_vmull.c
+++ b/src/cksum_vmull.c
@@ -72,12 +72,11 @@ cksum_vmull (FILE *fp, uint_fast32_t *crc_out, uintmax_t *length_out)
       uint64x2_t fold_data;
       uint64x2_t xor_crc;
 
-      if (length + bytes_read < length)
+      if (ckd_add (&length, length, bytes_read))
         {
           errno = EOVERFLOW;
           return false;
         }
-      length += bytes_read;
 
       datap = (uint64x2_t *) buf;
 
-- 
2.51.0

Reply via email to