summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPádraig Brady <P@draigBrady.com>2023-03-23 12:31:24 +0000
committerPádraig Brady <P@draigBrady.com>2023-03-23 12:36:53 +0000
commit76f2fb627118a26c25003dbd98c22c153b7ee1d2 (patch)
treeed7ed77e149e1acc28e4399fc88c2f38955a3000
parenteeabb11eb6697a137894db066715a07550c6d82a (diff)
downloadcoreutils-76f2fb627118a26c25003dbd98c22c153b7ee1d2.tar.gz
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
-rw-r--r--src/digest.c4
-rwxr-xr-xtests/misc/md5sum.pl10
2 files changed, 12 insertions, 2 deletions
diff --git a/src/digest.c b/src/digest.c
index 6ee8a4854..ab32968db 100644
--- 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"));
diff --git a/tests/misc/md5sum.pl b/tests/misc/md5sum.pl
index 186aca977..d712664b2 100755
--- a/tests/misc/md5sum.pl
+++ b/tests/misc/md5sum.pl
@@ -101,6 +101,16 @@ my @Tests =
. "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.