Skip to content

RFC: Impossible to verify checksum on Windows for any binary file that has the sequence \r\n #6805

@Pistonight

Description

@Pistonight

hashsum with --check always run in text mode on Windows:

// Execute the checksum validation
return perform_checksum_validation(
input.iter().copied(),
strict,
status,
warn,
binary_flag,
ignore_missing,
quiet,
Some(algo.name),
Some(algo.bits),
);

And you can't specify --binary
if binary_flag || text_flag {
return Err(ChecksumError::BinaryTextConflict.into());
}

Since text mode replaces \r\n with \n, this leads to unusual behavior:
In Linux:

$ cat sha256sums.txt | rg "2024.10.01-x86_64.iso"
b72dd6ffef7507f8b7cddd7c69966841650ba0f82c29a318cb2d182eb3fcb1db  archlinux-2024.10.01-x86_64.iso

$ sha256sum archlinux-2024.10.01-x86_64.iso --binary
b72dd6ffef7507f8b7cddd7c69966841650ba0f82c29a318cb2d182eb3fcb1db *archlinux-2024.10.01-x86_64.iso

$ sha256sum archlinux-2024.10.01-x86_64.iso --text
b72dd6ffef7507f8b7cddd7c69966841650ba0f82c29a318cb2d182eb3fcb1db  archlinux-2024.10.01-x86_64.iso

$ sha256sum -c sha256sums.txt
archlinux-2024.10.01-x86_64.iso: OK

$ sha256sum archlinux-2024.10.01-x86_64.iso --binary | sha256sum -c
archlinux-2024.10.01-x86_64.iso: OK

$ sha256sum archlinux-2024.10.01-x86_64.iso --text | sha256sum -c
archlinux-2024.10.01-x86_64.iso: OK

$ sha256sum archlinux-2024.10.01-x86_64.iso | sha256sum -c
archlinux-2024.10.01-x86_64.iso: OK

In Windows:

$ cat sha256sums.txt | rg "2024.10.01-x86_64.iso"
b72dd6ffef7507f8b7cddd7c69966841650ba0f82c29a318cb2d182eb3fcb1db  archlinux-2024.10.01-x86_64.iso

$ sha256sum archlinux-2024.10.01-x86_64.iso --binary
b72dd6ffef7507f8b7cddd7c69966841650ba0f82c29a318cb2d182eb3fcb1db *archlinux-2024.10.01-x86_64.iso

$ sha256sum archlinux-2024.10.01-x86_64.iso --text
e91465b21fa5f556c1015a3e8f44aef94301b2f742e56f23c6256c1bc9eb2855  archlinux-2024.10.01-x86_64.iso

$ sha256sum -c sha256sums.txt
archlinux-2024.10.01-x86_64.iso: FAILED
sha256sum: sha256sums.txt: no file was verified
sha256sum: WARNING: 1 computed checksum did NOT match

$ sha256sum archlinux-2024.10.01-x86_64.iso --binary | sha256sum -c
archlinux-2024.10.01-x86_64.iso: FAILED
sha256sum: WARNING: 1 computed checksum did NOT match

$ sha256sum archlinux-2024.10.01-x86_64.iso | sha256sum -c
archlinux-2024.10.01-x86_64.iso: FAILED
sha256sum: WARNING: 1 computed checksum did NOT match

$ sha256sum archlinux-2024.10.01-x86_64.iso --text | sha256sum -c
archlinux-2024.10.01-x86_64.iso: OK

I can think of 3 ways this might be fixed:

  1. Make --binary the default on Windows (might break some workflows for checking text files)
  2. Derive the mode for --check from previous output on Windows
    • Might require adding * manually before passing the input to hashsum, since the output might be obtained previously on GNU system without specifying --binary
  3. Allow specifying --binary for --check on Windows

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions