From: Emanuele Giacomelli
> Sent: 07 January 2022 11:00
>
> 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
>
> The patch looks for both markers and uses the one that is closer to the
> start.
> ---
> coreutils/md5_sha1_sum.c | 7 ++++++-
> 1 file changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/coreutils/md5_sha1_sum.c b/coreutils/md5_sha1_sum.c
> index 3b389cb6b..b7c1495d2 100644
> --- a/coreutils/md5_sha1_sum.c
> +++ b/coreutils/md5_sha1_sum.c
> @@ -298,12 +298,17 @@ int md5_sha1_sum_main(int argc UNUSED_PARAM, char
> **argv)
> while ((line = xmalloc_fgetline(pre_computed_stream))
> != NULL) {
> uint8_t *hash_value;
> char *filename_ptr;
> + char *filename_ptr_bin;
>
> count_total++;
> filename_ptr = strstr(line, " ");
> /* handle format for binary checksums */
> + filename_ptr_bin = strstr(line, " *");
> if (filename_ptr == NULL) {
> - filename_ptr = strstr(line, " *");
> + filename_ptr = filename_ptr_bin;
> + } else {
> + filename_ptr = (filename_ptr_bin !=
> NULL && filename_ptr_bin <
> filename_ptr) ?
> + filename_ptr_bin : filename_ptr;
Wouldn't it be easier to just use strchr() to find a ' ' and then
check the next character for ' ' or '*' ?
David
-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT,
UK
Registration No: 1397386 (Wales)
_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox