From 84a1305888ffcd0f4e47cfc4c6fc57918b97bdda Mon Sep 17 00:00:00 2001 From: Emanuele Giacomelli Date: Fri, 7 Jan 2022 14:17:48 +0100 Subject: XXXsum: handle binary sums with " " in the path If a line specifies a binary checksum whose path contains two adjacent spaces, when checking digests with -c the two spaces will be used as the separator between the digest and the pathname instead of " *", as shown: $ echo foo > "/tmp/two spaces" $ md5sum -b "/tmp/two spaces" # This is GNU md5sum d3b07384d113edec49eaa6238ad5ff00 */tmp/two spaces $ md5sum -b "/tmp/two spaces" | ./busybox md5sum -c md5sum: can't open 'spaces': No such file or directory spaces: FAILED md5sum: WARNING: 1 of 1 computed checksums did NOT match function old new delta md5_sha1_sum_main 503 496 -7 Signed-off-by: Emanuele Giacomelli Signed-off-by: Denys Vlasenko --- coreutils/md5_sha1_sum.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) (limited to 'coreutils') diff --git a/coreutils/md5_sha1_sum.c b/coreutils/md5_sha1_sum.c index 3b389cb6b..0e57673f1 100644 --- a/coreutils/md5_sha1_sum.c +++ b/coreutils/md5_sha1_sum.c @@ -300,12 +300,10 @@ int md5_sha1_sum_main(int argc UNUSED_PARAM, char **argv) char *filename_ptr; count_total++; - filename_ptr = strstr(line, " "); - /* handle format for binary checksums */ - if (filename_ptr == NULL) { - filename_ptr = strstr(line, " *"); - } - if (filename_ptr == NULL) { + filename_ptr = strchr(line, ' '); + if (filename_ptr == NULL + || (filename_ptr[1] != ' ' && filename_ptr[1] != '*') + ) { if (flags & FLAG_WARN) { bb_simple_error_msg("invalid format"); } -- cgit v1.2.1