Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion arcup/arcup
Original file line number Diff line number Diff line change
Expand Up @@ -656,7 +656,12 @@ verify_checksum_file() {
local archive_name="$3"
local expected_checksum expected_name actual_checksum

if ! read -r expected_checksum expected_name < "$checksum_path"; then
# `read` returns non-zero when it hits EOF before a newline, even though it
# still populates the variables. A checksum file whose single line has no
# trailing newline is valid, so decide emptiness from the parsed hash rather
# than from read's exit status.
read -r expected_checksum expected_name < "$checksum_path" || true
if [[ -z "$expected_checksum" ]]; then
error "Checksum file is empty: $checksum_path"
fi

Expand Down
14 changes: 14 additions & 0 deletions arcup/test_arcup.sh
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,20 @@ test_checksum_validation() {

printf '%s other-asset.tar.gz\n' "$checksum" > "$checksum_file"
expect_fail "checksum filename mismatch fails" verify_checksum_file "$archive" "$checksum_file" "$archive_name"

# A checksum file whose only line has no trailing newline is still valid.
printf '%s %s' "$checksum" "$archive_name" > "$checksum_file"
verify_checksum_file "$archive" "$checksum_file" "$archive_name"
pass "checksum file without trailing newline passes"

# A genuinely empty checksum file must still be rejected.
: > "$checksum_file"
expect_fail "empty checksum file fails" verify_checksum_file "$archive" "$checksum_file" "$archive_name"

# A wrong hash without a trailing newline must still fail the comparison,
# not slip through the emptiness check.
printf '%s %s' "0000000000000000000000000000000000000000000000000000000000000000" "$archive_name" > "$checksum_file"
expect_fail "mismatched checksum without trailing newline fails" verify_checksum_file "$archive" "$checksum_file" "$archive_name"
}

test_download_error_lists_assets() {
Expand Down