| https://www.reddit.com/r/archlinux/comments/11zdecf/sha256sum_c_prints_ok_for_a_failed_checksum_when/ |
| https://bugs.archlinux.org/task/77969 |
| https://bugs.gnu.org/62403 |
| |
| https://github.com/coreutils/coreutils/commit/76f2fb627118a26c25003dbd98c22c153b7ee1d2 |
| |
| From 76f2fb627118a26c25003dbd98c22c153b7ee1d2 Mon Sep 17 00:00:00 2001 |
| From: =?UTF-8?q?P=C3=A1draig=20Brady?= <P@draigBrady.com> |
| Date: Thu, 23 Mar 2023 12:31:24 +0000 |
| Subject: [PATCH] cksum: fix reporting of failed checks |
| |
| This applies to all checksumming utilities, |
| where we incorrectly report all subsequent files as checking 'OK' |
| once any file has passed a digest check. |
| The exit status was not impacted, only the printed status. |
| |
| * src/digest.c (digest_check): Use the correct state variable |
| to determine if the _current_ file has passed or not. |
| * tests/misc/md5sum.pl: Add a test case. |
| Fixes https://bugs.gnu.org/62403 |
| --- a/src/digest.c |
| +++ b/src/digest.c |
| @@ -1254,14 +1254,14 @@ digest_check (char const *checkfile_name) |
| |
| if (!status_only) |
| { |
| - if ( ! matched_checksums || ! quiet) |
| + if (! match || ! quiet) |
| { |
| if (needs_escape) |
| putchar ('\\'); |
| print_filename (filename, needs_escape); |
| } |
| |
| - if ( ! matched_checksums) |
| + if (! match) |
| printf (": %s\n", _("FAILED")); |
| else if (!quiet) |
| printf (": %s\n", _("OK")); |
| --- a/tests/misc/md5sum.pl |
| +++ b/tests/misc/md5sum.pl |
| @@ -101,6 +101,16 @@ |
| . "md5sum: WARNING: 1 line is improperly formatted\n" |
| . "md5sum: WARNING: 2 computed checksums did NOT match\n"}, |
| {EXIT=> 1}], |
| + # Ensure we use appropriate state to track failures (broken in 9.2) |
| + ['check-multifail-state', '--check', '--warn', |
| + {IN=>{'f.md5' => |
| + "$degenerate f\n" |
| + . "$degenerate g\n" |
| + . "$degenerate f\n" }}, |
| + {AUX=> {f=> ''}}, {AUX=> {g=> 'a'}}, |
| + {OUT=>"f: OK\ng: FAILED\nf: OK\n"}, |
| + {ERR=>"md5sum: WARNING: 1 computed checksum did NOT match\n"}, |
| + {EXIT=> 1}], |
| # The sha1sum and md5sum drivers share a lot of code. |
| # Ensure that md5sum does *not* share the part that makes |
| # sha1sum accept BSD format. |
| |