Browse Source

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 <emanuele.giacomelli@gmail.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Emanuele Giacomelli 2 years ago
parent
commit
84a1305888
1 changed files with 4 additions and 6 deletions
  1. 4 6
      coreutils/md5_sha1_sum.c

+ 4 - 6
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");
 					}