Before:

  $ cksum --length -1 -a sha2 /dev/null
  cksum: invalid length: ‘-1’: Value too large for defined data type

After:

  $ cksum --length -1 -a sha2 /dev/null
  cksum: invalid length: ‘-1’
  cksum: digest length for ‘SHA2’ must be 224, 256, 384, or 512

* src/cksum.c: Avoid EOVERFLOW for negative numbers
(similarly to commit v9.5-71-gf2c84fe63).

Link: https://github.com/coreutils/coreutils/issues/386
---
 src/cksum.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/cksum.c b/src/cksum.c
index 186ba3185..e0338ead4 100644
--- a/src/cksum.c
+++ b/src/cksum.c
@@ -1623,9 +1623,10 @@ main (int argc, char **argv)
 #endif
 #if HASH_ALGO_BLAKE2 || HASH_ALGO_CKSUM
       case 'l':
-        digest_length = xnumtoimax (optarg, 10, 0, IDX_MAX, "",
+        /* Suppress range errors, but clamp to values that error later.  */
+        digest_length = xnumtoimax (optarg, 10, -1, IDX_MAX, "",
                                     _("invalid length"), 0,
-                                    XTOINT_MAX_QUIET);
+                                    XTOINT_MIN_QUIET | XTOINT_MAX_QUIET);
         digest_length_str = optarg;
         break;
 #endif
-- 
2.55.0


Reply via email to