[git commit] {md5,shaN}sum: make -c EMPTY fail

Denys Vlasenko vda.linux at googlemail.com
Mon Jul 11 17:51:08 UTC 2016


commit: https://git.busybox.net/busybox/commit/?id=b0056ea86d427d76bb4c08506198d0c97075fdf6
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master

function                                             old     new   delta
md5_sha1_sum_main                                    466     485     +19

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 coreutils/md5_sha1_sum.c | 23 ++++++++++++++---------
 testsuite/md5sum.tests   | 22 +++++++++++++++++-----
 2 files changed, 31 insertions(+), 14 deletions(-)

diff --git a/coreutils/md5_sha1_sum.c b/coreutils/md5_sha1_sum.c
index 1a5342e..c0e816b 100644
--- a/coreutils/md5_sha1_sum.c
+++ b/coreutils/md5_sha1_sum.c
@@ -66,6 +66,10 @@
 //usage:     "\n	-w	Warn about improperly formatted checksum lines"
 //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"
 
 /* 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;
 
 	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) */
 		flags = getopt32(argv, "scwbt");
 		argv += optind;
@@ -185,15 +191,6 @@ int md5_sha1_sum_main(int argc UNUSED_PARAM, char **argv)
 	if (!*argv)
 		*--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 {
 		if (ENABLE_FEATURE_MD5_SHA1_SUM_CHECK && (flags & FLAG_CHECK)) {
 			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",
 						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);
 		} else {
 			uint8_t *hash_value = hash_file(*argv);
diff --git a/testsuite/md5sum.tests b/testsuite/md5sum.tests
index 6c75b6d..cca26dc 100755
--- a/testsuite/md5sum.tests
+++ b/testsuite/md5sum.tests
@@ -23,6 +23,8 @@ test -f "$bindir/.config" && . "$bindir/.config"
 test x"$CONFIG_FEATURE_FANCY_HEAD" != x"y" \
 && { echo "SKIPPED: $sum"; exit 0; }
 
+FAILCOUNT=0
+
 text="The quick brown fox jumps over the lazy dog"
 text=`yes "$text" | head -c 9999`
 
@@ -33,11 +35,21 @@ while test $n -le 999; do
 	n=$(($n+1))
 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"
-	exit 0
 fi
 
-echo "FAIL: $sum (r:$result exp:$expected)"
-exit 1
+# GNU compat: -c EMPTY must fail (exitcode 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


More information about the busybox-cvs mailing list