split no longer exits when invocations of a --filter return EPIPE.
[bug introduced in coreutils-8.26]
+ md5sum --check no longer incorrectly enables BSD reversed format mode when
+ ignoring some non checksum lines. This also affects sha*sum and b2sum.
+ [bug introduced in coreutils-8.14]
+
* Noteworthy changes in release 8.27 (2017-03-08) [stable]
return s;
}
+/* Return true if S is a NUL-terminated string of DIGEST_HEX_BYTES hex digits.
+ Otherwise, return false. */
+static bool _GL_ATTRIBUTE_PURE
+hex_digits (unsigned char const *s)
+{
+ unsigned int i;
+ for (i = 0; i < digest_hex_bytes; i++)
+ {
+ if (!isxdigit (*s))
+ return false;
+ ++s;
+ }
+ return *s == '\0';
+}
+
/* Split the checksum string S (of length S_LEN) from a BSD 'md5' or
'sha1' command into two parts: a hexadecimal digest, and the file
name. S is modified. Return true if successful. */
i++;
*hex_digest = (unsigned char *) &s[i];
- return true;
+
+ return hex_digits (*hex_digest);
}
/* Split the string S (of length S_LEN) into three parts:
s[i++] = '\0';
+ if (! hex_digits (*hex_digest))
+ return false;
+
/* If "bsd reversed" format detected. */
if ((s_len - i == 1) || (s[i] != ' ' && s[i] != '*'))
{
return true;
}
-/* Return true if S is a NUL-terminated string of DIGEST_HEX_BYTES hex digits.
- Otherwise, return false. */
-static bool _GL_ATTRIBUTE_PURE
-hex_digits (unsigned char const *s)
-{
- unsigned int i;
- for (i = 0; i < digest_hex_bytes; i++)
- {
- if (!isxdigit (*s))
- return false;
- ++s;
- }
- return *s == '\0';
-}
-
/* If ESCAPE is true, then translate each NEWLINE byte to the string, "\\n",
and each backslash to "\\\\". */
static void
line[--line_length] = '\0';
if (! (split_3 (line, line_length, &hex_digest, &binary, &filename)
- && ! (is_stdin && STREQ (filename, "-"))
- && hex_digits (hex_digest)))
+ && ! (is_stdin && STREQ (filename, "-"))))
{
++n_misformatted_lines;
md5sum --strict -c check.md5sum || fail=1
md5sum --strict -c check.md5 || fail=1
+# Ensure we don't trigger BSD reversed format with GPG headers etc.
+{ echo '____not_all_hex_so_no_match_____ blah';
+ cat check.md5sum; } > check2.md5sum || framework_failure_
+md5sum -c check2.md5sum 2>check2.err || fail=1
+echo 'md5sum: WARNING: 1 line is improperly formatted' >check2.exp
+compare check2.exp check2.err || fail=1
+
# If we skip the first entry in the BSD format checksums
# then it'll be detected as standard format and error.
# This unlikely caveat was thought better than mandating