{md5,shaN}sum: make -c EMPTY fail

function                                             old     new   delta
md5_sha1_sum_main                                    466     485     +19

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2016-07-11 19:51:08 +02:00
parent f6348e50ef
commit b0056ea86d
2 changed files with 31 additions and 14 deletions

View File

@ -66,6 +66,10 @@
//usage: "\n -w Warn about improperly formatted checksum lines" //usage: "\n -w Warn about improperly formatted checksum lines"
//usage: ) //usage: )
//FIXME: GNU coreutils 8.25 has no -s option, it has only these two long opts:
// --quiet don't print OK for each successfully verified file
// --status don't output anything, status code shows success
#include "libbb.h" #include "libbb.h"
/* This is a NOEXEC applet. Be very careful! */ /* This is a NOEXEC applet. Be very careful! */
@ -174,6 +178,8 @@ int md5_sha1_sum_main(int argc UNUSED_PARAM, char **argv)
unsigned flags; unsigned flags;
if (ENABLE_FEATURE_MD5_SHA1_SUM_CHECK) { if (ENABLE_FEATURE_MD5_SHA1_SUM_CHECK) {
/* -s and -w require -c */
opt_complementary = "s?c:w?c";
/* -b "binary", -t "text" are ignored (shaNNNsum compat) */ /* -b "binary", -t "text" are ignored (shaNNNsum compat) */
flags = getopt32(argv, "scwbt"); flags = getopt32(argv, "scwbt");
argv += optind; argv += optind;
@ -185,15 +191,6 @@ int md5_sha1_sum_main(int argc UNUSED_PARAM, char **argv)
if (!*argv) if (!*argv)
*--argv = (char*)"-"; *--argv = (char*)"-";
if (ENABLE_FEATURE_MD5_SHA1_SUM_CHECK && !(flags & FLAG_CHECK)) {
if (flags & FLAG_SILENT) {
bb_error_msg_and_die("-%c is meaningful only with -c", 's');
}
if (flags & FLAG_WARN) {
bb_error_msg_and_die("-%c is meaningful only with -c", 'w');
}
}
do { do {
if (ENABLE_FEATURE_MD5_SHA1_SUM_CHECK && (flags & FLAG_CHECK)) { if (ENABLE_FEATURE_MD5_SHA1_SUM_CHECK && (flags & FLAG_CHECK)) {
FILE *pre_computed_stream; FILE *pre_computed_stream;
@ -244,6 +241,14 @@ int md5_sha1_sum_main(int argc UNUSED_PARAM, char **argv)
bb_error_msg("WARNING: %d of %d computed checksums did NOT match", bb_error_msg("WARNING: %d of %d computed checksums did NOT match",
count_failed, count_total); count_failed, count_total);
} }
if (count_total == 0) {
return_value = EXIT_FAILURE;
/*
* md5sum from GNU coreutils 8.25 says:
* md5sum: <FILE>: no properly formatted MD5 checksum lines found
*/
bb_error_msg("%s: no checksum lines found", *argv);
}
fclose_if_not_stdin(pre_computed_stream); fclose_if_not_stdin(pre_computed_stream);
} else { } else {
uint8_t *hash_value = hash_file(*argv); uint8_t *hash_value = hash_file(*argv);

View File

@ -23,6 +23,8 @@ test -f "$bindir/.config" && . "$bindir/.config"
test x"$CONFIG_FEATURE_FANCY_HEAD" != x"y" \ test x"$CONFIG_FEATURE_FANCY_HEAD" != x"y" \
&& { echo "SKIPPED: $sum"; exit 0; } && { echo "SKIPPED: $sum"; exit 0; }
FAILCOUNT=0
text="The quick brown fox jumps over the lazy dog" text="The quick brown fox jumps over the lazy dog"
text=`yes "$text" | head -c 9999` text=`yes "$text" | head -c 9999`
@ -33,11 +35,21 @@ while test $n -le 999; do
n=$(($n+1)) n=$(($n+1))
done | "$sum" done | "$sum"
)` )`
if test x"$result" != x"$expected -"; then
if test x"$result" = x"$expected -"; then echo "FAIL: $sum (r:$result exp:$expected)"
: $((FAILCOUNT++))
else
echo "PASS: $sum" echo "PASS: $sum"
exit 0
fi fi
echo "FAIL: $sum (r:$result exp:$expected)" # GNU compat: -c EMPTY must fail (exitcode 1)!
exit 1 >EMPTY
if "$sum" -c EMPTY 2>/dev/null; then
echo "FAIL: $sum -c EMPTY"
: $((FAILCOUNT++))
else
echo "PASS: $sum -c EMPTY"
fi
rm EMPTY
exit $FAILCOUNT