The optarg from getopt(3) is defined as a char *, but md5 variable 'checkAgainst' is an unsigned type which leads to a warning on assignment and later calls to strcmp (et al) when using a strict type check compiler.
Also, the variables may as well be static scope, as per the following patch against SVN revision 238964 of /sbin/md5/md5.c
--- md5-238964.c 2014-09-08 22:45:27.0 +0100
+++ md5-new.c 2014-09-08 22:45:27.0 +0100
@@ -42,11 +42,11 @@
#define TEST_BLOCK_COUNT 100000
#define MDTESTCOUNT 8
-unsigned char* checkAgainst;
+static int qflag;
+static int rflag;
+static int sflag;
+static char* checkAgainst;
+static int checksFailed;
typedef void (DIGEST_Init)(void *);
typedef void (DIGEST_Update)(void *, const unsigned char *, size_t);
A commit references this bug:
Date: Thu Mar 26 22:34:28 UTC 2015
New revision: 280716
- Correct type for checkAgainst.
- Staticify flags that are not used outside the file scope.
Submitted by: Robert Sprowson <webpages sprow.co.uk>
MFC after: 2 weeks